2012-04-12 10 views
2

Ich habe zwei Internetkarten auf meinem Computer mit zwei separaten IP-Adressen konfiguriert. Beide IP-Adressen sind Teil desselben Netzwerks. Habe ich Recht damit, wenn ich einen Socket erstelle, der spezifisch für eine dieser IP-Adressen ist?Sockets und mehrere IP-Adressen

UPDATE:

Hier ist meine Situation:

Ich habe ein Hardware-Gerät an 192.168.0.10 befindet. Er kommuniziert über udp mit (192.168.0.11, 50000) und (192.168.0.12, 50000). Das Hardwaregerät führt dies über zwei Ports durch: (192.168.0.10, 49000) und (192.168.0.10, 49001).

Ich erstelle die Ports (192.168.0.11, 50000) und (192.168.0.12, 50000) über ein Skript, damit ich die Kommunikation protokollieren und manipulieren kann, die Daten werden dann an zwei sprechfähige Simulatoren weitergeleitet die Hardware.

Also in der Tat, mein Skript ist „der Mann in der Mitte“, wo ich lüge und korrupten Daten zum Zweck der Hardware zu testen.

Hier sind die Socket-Schnittstellen für meinen Skript:

IP 1 - Channel 1 

External_socket = (192.168.0.10, 49000) ** Hardware 
External_side_socket = (192.168.0.11, 50000) ** Script 
Simulator_side_socket = (192.168.0.11, 50001) ** Script 
Simulator_socket = (192.168.0.11, 50002) ** Simulator 

IP2 - Channel 2 

External_socket = (192.168.0.10, 49001) ** Hardware 
External_side_socket = (192.168.0.12, 50000) ** Script 
Simulator_side_socket = (192.168.0.12, 50001) ** Script 
Simulator_socket = (192.168.0.12, 60002) ** Simulator 

Und das funktioniert wie erwartet, und die richtigen Daten für jeden Kanal angemeldet.

jedoch es nicht mehr funktioniert, wenn ich zwei einfache Änderungen vornehmen:

1) I der zweiten Simulators Konfigurationsdatei 60.002-50.002 zu ändern, während die IP-Adresse auf 192.168.0.12 zu halten.

2) In meinem Skript, das ich ändere auch 60.002 bis 50.002, für IP2.

einmal die Daten von dem zweiten Kanal auf dem ersten Simulator ankommen. Wie kann das sein? .net hat eine IPAny und ich frage mich, ob der Simulator dies irgendwie verwendet und die IP-Adresse in seiner Konfigurationsdatei ignoriert. Denkst du, dass das hier das Problem sein könnte?

Danke,

Barry

Antwort

0

Ich würde sagen, dass es richtig-ish ist. Abhängig von der Abstraktionsebene, die Sie in Ihrer Anweisung verwenden möchten.

Wenn Sie einen Socket erstellen, ist er nicht an eine IP-Adresse gebunden. Mit Blick auf den Wikipedia-Artikel über die Berkeley socket Sie sehen, dass erste die Fassung erstellen (socket()) unter Angabe Domäne, Einfaßungsart und Familie. Dann wird der Socket (bind()) an eine Adresse gebunden, zum Beispiel 10.0.0.1. Je nachdem, für was Sie den Socket verwenden möchten, können Sie ihn auf Hören, Akzeptieren oder Verbinden einstellen.

Lokaler Host eine IP-Adresse, wie jedes andere Gerät, das 127.0.0.1 ist. Sie erstellen den Socket und binden ihn an 127.0.0.1. Dann funktioniert dieser Socket wie jeder andere Socket, mit dem Sie kommunizieren können.

Sie könnten auch den Wikipedia-Artikel auf Network Socket lesen.

0

Sie können den Wert bind mit dem Wert INADDR_ANY eingeben, was bedeutet, dass keine Bindung an eine bestimmte Netzwerkschnittstelle besteht. Sie können also die IP-Adresse ignorieren, auf der Ihr Programm ausgeführt wird.

Referenzen here und here.