2016-07-22 11 views
-1

Ich habe derzeit 2 .Net-Anwendungen, die gleichzeitig auf demselben PC laufen.UDP für Interprozesskommunikation

Diese 2-Anwendungen kommunizieren über UDP wie folgt aus:

Auftraggeber:

udpUnityToConsole = new UdpClient(); 
udpUnityToConsole.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 
try 
{ 
    udpUnityToConsole.Connect("localhost", 11004); 
} 

Server:

unityUdpReceive = new UdpClient(); 
unityUdpReceive.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 
unityUdpReceive.Client.Bind(new IPEndPoint(IPAddress.Any, 11004)); 

Der Kommunikationsstrom ist schnell und zuverlässig, gibt es nur ein Problem mit ihm Wenn der PC nicht mit einem Netzwerk verbunden ist, stürzt er mit einem

0 ab

Wenn die Verbindung bereits hergestellt wurde und der PC vom Netzwerk getrennt wird, bleibt die Verbindung bestehen. Nur wenn zu Beginn keine Netzwerkverbindung besteht, wird es fehlschlagen.

Alle Vorschläge werden sehr geschätzt.

+1

Netzwerk kann jederzeit fehlschlagen. Wickeln Sie Ihr Programm mit try-catch, wo immer es gebraucht wird. – Tommy

+1

Wenn Sie wissen, dass die Anwendungen immer auf demselben Computer ausgeführt werden, verwenden Sie Named Pipes. Siehe http://stackoverflow.com/questions/13806153/example-of-named-pipes. Auf diese Weise brauchen Sie kein Netzwerk. Aber Sie sollten immer noch auf Fehler prüfen. –

+0

Ich zögere, an dieser Stelle zu Named Pipes zu wechseln. Ich habe schon eine Menge Code für die UDP-Version und ich bevorzuge die Art, wie UDP funktioniert. Wie auch immer, ich habe eine einfache Lösung für mein Problem gefunden. Danke für den Tipp –

Antwort

0

Alles, was ich tun musste, war Localhost zu 127.0.0.1 zu ändern, das ist die Adresse des lokalen Computers und ändert sich nie, deshalb ist es sicher zu verwenden. Die Verwendung von localhost bedeutete, dass die UDP-Bibliothek nach der IP suchen musste, die mit dem localhost-Alias ​​verwendet wurde, aber das war nicht notwendig, wie ich es bereits wusste. Ich könnte wahrscheinlich auch die IP auf andere Weise herausfinden und diese Abfrage auf beiden Anwendungen ausführen.