Laden...

TCPCLIENT local Endpoint / Port festlegen

Erstellt von qazeem vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.929 Views
qazeem Themenstarter:in
103 Beiträge seit 2006
vor 13 Jahren
TCPCLIENT local Endpoint / Port festlegen

Halllo,

Habe einen Server, der nur Verbindungen von einem bestimmten LocalEndPoint zulässt. Also IP und Port.

Wie kann ich in meinem Client einen bestimmten lokalen Port zuweisen, den er verwenden soll? Habe gesehen, dass er nach jedem Connect Versuch einen anderen Port benutzt.

Der Port den ich im Konstruktor angebe, bezieht sich doch ausschliesslich auf den Remote Host oder?

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

benutze den TcpClient-Konstruktor, der einen IPEndPoint als Parameter annimmt:
TcpClient-Konstruktor (IPEndPoint), lies den Abschnitt 'Hinweise'

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 13 Jahren

Vielen Dank für die rasche Antwort,

Ist das eigentlich normal, dass der Server auf den lokalen Port achtet.

Wenn ich die Verbindung zum 2. Mal herstellen will, bekomme ich nach dem Connect Aufrufe folgende Fehlermeldung:

"Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden."

Kann ich den Port irgendwie wieder freigeben?

Gelöschter Account
vor 13 Jahren

ja, mit Dispose.

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 13 Jahren

Mit Dispose alleine klappt das bei mir nicht.

Zum Verbindung abbauen, führe ich folgendes aus:

Nstream.Dispose();
Nstream.Close();
tcpclient.Close();

Muss ich sonst noch was beachten?

Gelöschter Account
vor 13 Jahren

den TcpClient disposen? denn der hält ja auch den Socket und die Unverwalteten Ressourcen dazu.

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 13 Jahren

Ich kann die tcpclient.Dispose() Method aber nicht aufrufen. ( is inaccessable due to its protection level )

Weiss du was ich falsch mache?

Gelöschter Account
vor 13 Jahren

Oh Entschuldigung. ich habe eben bemerkt, das Close() bereits Dispose() aufruft.

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

ein Close auf dem TcpClient müsste reichen:

Beim Aufrufen dieser Methode wird der zugeordnete Socket geschlossen. Außerdem wird der zugeordnete NetworkStream geschlossen, mit dem Daten gesendet und empfangen werden, falls ein solcher erstellt wurde.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 13 Jahren

Leider klappt es mit Close() aber nicht. Ich muss das Programm beenden, einige Minuten warten, dann kann ich erst wieder die Verbindung herstellen, da der Port irgendwie noch benutzt wird.

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

auch noch wenn Du vorher Close auf dem Network-Stream rufst?
Es gibt da noch ein paar Feinheiten:

TcpClient.Close-Methode (unter Hinweise)

The TcpClient Close method does not close the underlying TCP connection

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

4.221 Beiträge seit 2005
vor 13 Jahren

Setze auf dem Socket einen DontLinger dann gehts schneller...

Socket.SetSocketOption-Methode

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...