2013-10-27 12 views
5

Ich bin derzeit eine Netzwerk-Anwendung auf meinem Rechner mit 2 Netzwerkschnittstellen mit dem folgenden Setup-Entwicklung -UDP mit mehreren Netzwerk Vernetzung

Current network setting

möchte ich mit IP unter Verwendung der ersten Konfiguration UDP-Nachricht senden 192.168.1.2.

using (var udpClient = new UdpClient(5556)) 
{ 
    udpClient.Connect(IPAddress.Parse("192.168.1.2"), 5556); 
    // DO STUFF 
} 

Wenn ich das versuchen bekomme ich folgende Fehler -

keine Verbindung hergestellt werden konnte, weil die Zielmaschine aktiv sie verweigert

Seltsam ist, dass, wenn ich meine deaktivieren anderes Netzwerk, das funktioniert einwandfrei aber mit 2 Anschlüssen (; LAN & WiFi) funktioniert es nicht mehr ... ich schätze, dass es auf falschen Adapter sendet? Ist dies, weil mein Standard-Gateway ist das gleiche oder was mache ich falsch? Ich bin neu Netzwerk-basierte Anwendungen zu entwickeln ...

+0

Übrigens müssen Sie nicht Connect mit UDP aufrufen - das bedeutet, dass Sie jedes Mal, wenn Sie einen Anruf senden, den Endpunkt, an den Sie senden möchten, nicht übergeben müssen. – markmnl

+0

Sie können auch die Loopback-Adresse 127.0.0.1 verwenden und Schnittstellen haben. – markmnl

Antwort

1

Sie haben eine IPEndPoint mit Netzwerkkarte IP wie folgt angeben:

var endpoint = new IPEndPoint(IPAddress.Parse("192.168.1.2"), portNum); 
UdpClient client = new UdpClient(endpoint); 
1

Sie nicht UdpClient erzählt werden, die IP zu verwenden.

UdpClient hat eine constructor, die eine IPEndPoint nehmen kann.

const string ip = "192.168.1.2"; 
const int port = 5556; 

var listenEndpoint = new IPEndPoint(IPAddress.Parse(ip), port); 
var udpClient = new UdpClient(listenEndpoint); 
+0

Ich habe das versucht, aber es funktioniert auch nicht, irgendwelche Ideen? –

1

Ich bin nicht so gut in C#, aber ich denke, ich verstehe das Problem. Sie binden Ihren udpClient an Port 5556, aber Sie geben die IP-Adresse nicht an. Das Betriebssystem wählt die IP-Adresse für Sie aus. Ich nehme an, es könnte entweder 192.168.1.2 oder 192.168.1.5 sein, man kann nicht sagen, welches. Dann versuchen Sie mit dem gleichen udpClient eine Verbindung zu einem entfernten Host herzustellen, der auf 192.168.1.2, Port 5556 hört. Und wahrscheinlich hört niemand dort zu. Deshalb erhalten Sie den Fehler.

ich tun würde, das folgende (sorry für meine schlechten C# Fähigkeiten):

  • Haben zwei UdpClient der, in einem Thread oder Programm/Prozess:

    var udpClient1 = new UdpClient("192.168.1.2", 5556); 
    

Dieser wird höre auf IP Adressen 192.168.1.2, Port 5556.

  • in zweitem Thread oder Programm/Prozess:

    var udpClient2 = new UdpClient(); //doesn't matter which (IP, port) the OS will bind it to. 
    udpClient2.Connect(IPAddress.Parse("192.168.1.2"), 5556); //connect to peer/server listening in (IP=192.168.1.2, port=5556) 
    

Sie beide auch udpClient1 und udpClient2 im selben Thread umgehen können. Das Wichtige ist, dass wenn man sich an und (IP, Port) anschließt, muss dort eine Anwendung/Prozess zuhören. Andernfalls sendet der Remote-Host eine ICMP-Nachricht, die angibt, dass das Datagramm nicht zugestellt werden kann. Die Verbindung wird abgelehnt.