2016-12-19 3 views
0

Ich versuche, eine einfache UDP Server zu machen, indem man UdpClient mit es funktioniert ok mit der ersten Verbindung, aber wenn eine andere IP sendet etwas auf den gleichen Port, da wird ignoriert zuhört, so weit ich weiß, ist die Buchse an einem anderen Remote-IP verbundenFehler 10057 beim Versuch zu trennen UdpClient

MyUdpClient.Connect(RemoteIpEndPoint) 
MyUdpClient.Send(Encoding.ASCII.GetBytes(ACK), ACK.Length) 

So, nachdem das ACK senden füge ich eine Linie von dem Remote-Client zu trennen, um zu halten

hören
MyUdpClient.Client.Disconnect(True) 

Aber ich Fehler bekommen 10057. "Eine Anfrage zum Senden oder Empfangen von Daten war nicht zulässig, da der Socket nicht verbunden ist ....“

Wich ist seltsam, weil der Remote-Client empfängt die alle Daten OK, verstehe ich nicht, was geschieht, was zu senden versucht?

Es gibt eine Möglichkeit, zu wissen, wann ich aus dem aktuellen Remote-Client trennen kann?

Was ich tun muß, ist ein ACK zu jedem Paket zu beantworten und Zufallsdaten zum letzten Remote-IP, die etwas an den Server zu senden.

ich mehr Code haben, ist aber ein bisschen zu lang, wenn Sie es brauchen lass es mich wissen.

Antwort

0

UDP ist ein verbindungsloses Protokoll, im Gegensatz zu TCP. Daher können Sie einen UDP-Client nicht trennen, daher ist der Fehler korrekt (wenn auch etwas irreführend).

Wie, warum die zweite Verbindung fehlschlägt, müssen wir Ihre Server-Code sehen. Vielleicht schließen Sie auch versehentlich den Server-UDP-Socket?

+0

Ich weiß das, aber dann, warum die Methoden ** Connect ** und ** Disconnect ** innerhalb ** UdpClient ** existieren? –

+0

Wahrscheinlich, weil sie in der Basisklasse definiert sind (alle diese socket-type-Klassen stammen normalerweise von einer generischen Socket-Klasse). Die Tatsache, dass diese Funktionen existieren, bedeutet nicht immer, dass sie etwas Nützliches tun können. – JvO

Verwandte Themen