Ich habe gerade angefangen, mit dem UDPClient in .Net (Core 2) zu arbeiten. und bemerkte, dass es beim Empfang tatsächlich eine Ausnahme "remote hat geschlossene Verbindung" auslösen kann. Das macht für mich keinen Sinn, da UDP keine Fernbedienungen benötigt.Warum ist eine Remote-Verbindung geschlossen? Ausnahme für UDP-Sockets?
Ich empfange UDP-Daten von einer Anwendung, über die ich keine Kontrolle habe. Was ich kurz tun, ist dies:
if(MyUDPClient.Available > 0)
{
IPEndPoint Point = null;
Byte[] Data = MyUDPClient.Receive(ref point);
//[do something with data]
}
jedoch während der Laufzeit der Anwendung (während ich Daten empfangen, oben in einer Schleife durchgeführt), um den Anruf zu empfangen kann die Ausnahme werfen, dass die Fern die geschlossen Verbindung (was es nicht ...).
Kann jemand mir erklären, warum diese Ausnahme überhaupt eine Sache ist und vielleicht sogar ein Workaround? Alles, was ich will, ist Daten empfangen und identifizieren, von welchem Endpunkt es originiert.
Bitte geben Sie einen Mindestcode ein. Ohne zu sehen, wie Sie MyUDPClient initialisieren, können wir nur spekulieren, was das Problem ist. Möglicherweise haben Sie MyUDPClient mit dem Standardkonstruktor erstellt, was bedeutet, dass Sie den lokalen Port/lokalen Endpunkt nicht angegeben haben. Wenn dies der Fall ist, schlägt MyUDPClient.Available fehl, weil es nicht weiß, wo nach verfügbaren Daten gesucht werden soll. Aber du hast Recht, die Ausnahme, dass die Fernbedienung die Verbindung geschlossen hat, ist sehr irreführend. Es bedeutet wahrscheinlich nur, dass Ihr UDPClient nicht an einen lokalen Port gebunden ist. – Xaver
Nach einigen Ausgrabungen wird dieser Fehler von UDP-Sockets ausgelöst, nachdem Sie versucht haben, Daten an einen Endpunkt zu senden, der den Socket geschlossen hat. Während Ihr UDPSocket möglicherweise einige Daten zu lesen hat, wird eine Ausnahme ausgelöst, da der letzte Sendevorgang nicht erfolgreich war. Ein Control-Flag erlaubt es, dies zu ignorieren. Ich werde eine Antwort hinzufügen. –