2013-10-27 16 views
5

Attualmente sto sviluppando un'applicazione di rete sulla mia macchina con 2 interfacce di rete con la seguente configurazione -UDP in rete con rete multipla

Current network setting

voglio inviare un messaggio UDP utilizzando la prima configurazione con IP 192.168.1.2.

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

Quando provo questo ottengo il seguente errore -

Nessuna connessione potrebbe essere fatto perché il computer di destinazione attivamente rifiutato

Strano questo è che quando a disattivare il mio altra rete che funziona perfettamente ma con 2 connessioni (LAN & WiFi) non funziona più ... Immagino che stia inviando un adattatore sbagliato? È perché il mio gateway predefinito è lo stesso o cosa sto facendo male? Sono nuovo di sviluppo di applicazioni basate sulla rete ...

+0

Per inciso, non è necessario chiamare Connetti con UDP - tutto ciò che accade è ogni volta che si chiama l'invio non è necessario passare il punto finale a cui si desidera inviare. – markmnl

+0

Inoltre, è possibile utilizzare l'indirizzo di loopback: 127.0.0.1 e avere interfacce connesse. – markmnl

risposta

1

Devi specificare un IPEndPoint con scheda di rete IP in questo modo:

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

Non sta dicendo che UdpClient IP da utilizzare.

UdpClient ha un constructor che può richiedere un IPEndPoint.

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

Ho provato questo, ma non funziona bene, qualche idea? –

1

io non sono così bravo in C#, ma credo di aver capito il problema. Stai legando il tuo udpClient alla porta 5556 ma non stai specificando l'indirizzo IP. Il sistema operativo selezionerà l'indirizzo IP per te. Suppongo che potrebbe essere 192.168.1.2 o 192.168.1.5, non si può dire quale. Quindi con lo stesso udpClient si sta tentando di connettersi ad un host remoto in ascolto su 192.168.1.2, porta 5556. E probabilmente nessuno sta ascoltando lì. Questo è il motivo per cui ricevi l'errore.

vorrei fare quanto segue (mi dispiace per il mio cattivo competenze C#):

  • hanno due classe UdpClient di, in un thread o di un programma/processo:

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

Questo sarà ascolta IP address 192.168.1.2, porta 5556.

  • in secondo thread o programma/processo:

    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) 
    

Si può gestire sia udpClient1 e udpClient2 nello stesso thread anche. L'importante è che se ci si connette a e (IP, porta) ci deve essere qualche applicazione/processo in ascolto lì. In caso contrario, l'host remoto invierà un messaggio ICMP che indica che il datagramma non può essere consegnato. La connessione è rifiutata.