2016-08-08 17 views
0

Ich schreibe Client-Code, der Datenströme von zwei Servern verarbeitet A & B. Alle drei Knoten sind im selben lokalen Subnetz. Ich versuche, zwei Sockets zu erstellen, die wie unten beschrieben definiert sind.Warum kann ich nicht zwei Buchsen verbinden?

Sockel description = [local/Client-IP]: [local/Client-Port]: [Remote/Server-IP]: [remote/Server-Port]

Socket A zu verbinden: [192.168.40.10]: [50002]: [192.168.40.60]: [50002]

Socket B zu verbinden: [192.168.40.10]: [50002]: [192.168.40.61]: [50002]

Wenn ich versuche, zu Öffnen Sie den zweiten Socket, bekomme ich eine Ausnahme, dass "jede Socket-Adresse aka Protokoll/Netzwerkadresse/Port kann nur einmal verwendet werden". Ich dachte, ich könnte einen anderen Socket definieren, da die Remote-IP-Adresse unterschiedlich ist, obwohl die lokale IP-Adresse und die Portnummer identisch sind. Habe ich keine andere Wahl, als beide Datenströme über den gleichen Socket zu konsumieren?

+0

Wie Sie der Kunde sind, lassen Sie die LokalerAnschluss Eigenschaft leer. Windows wird dann ein kostenloses auswählen. Der lokale Port ist nur notwendig, wenn Sie Ihren Socket in den Listen-Modus setzen. –

+0

Ich denke, ich muss die zwei Server konfigurieren (weil ich diese Fähigkeit habe), die Ziel-IP 192.168.40.10 zu verwenden und jedes zu einem eindeutigen Zielport zu setzen. Dann kann ich zwei Sockets öffnen, die auf zwei Threads im Client laufen und Pakete von jedem Server-Stream empfangen. Dadurch kann ich eine Menge Code, den ich geschrieben habe, wiederverwenden, um mit einem einzigen Stream zu arbeiten. –

Antwort

2

Sie können nicht denselben lokalen Port Ihrer Maschine gleichzeitig verwenden. Sie könnten einen anderen Socket (mit einer anderen Portnummer, z. B. 50003) auf Ihrem lokalen Computer öffnen und eine Verbindung zum Remote-Socket unter [192.168.40.61]: [50002] herstellen.

+0

Danke für die Klarstellung. Ich habe gelesen, dass einige Leute eine Socket-Identifikation als die Remote-IP-Adresse beschreiben. Offensichtlich nicht wahr. –

1

Sie verwenden den gleichen TCP-Port [50002] zum Verbinden, um zwei verschiedene Verbindungen herzustellen, was nicht möglich ist. Sie müssen einen anderen Anschluss verwenden, um zwei separate Socket-Verbindungen zu haben.

Wenn Sie über die Identifizierung zwei Verbindung eindeutig zu sprechen, geht es durch IP + PORT