2013-10-27 58 views
5

我目前正在開發我的機器上有2個網絡接口具有下列設置的網絡應用網絡 -UDP與多個網絡

Current network setting

我想通過使用IP第一配置發送UDP消息192.168.1.2

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

當我嘗試這一點,我碰到下面的錯誤 -

無連接可以作出,因爲目標機器積極 拒絕它

奇怪的是,當我禁用我的其他網絡,這完美的作品,但有2個連接(局域網& WiFi)它不工作了... 我想它是發送錯誤的適配器? 這是因爲我的默認網關是一樣的還是我做錯了什麼? 我是新來開發基於網絡的應用...

+0

順便說一句,您不需要使用UDP調用Connect - 所有這些都是您每次打電話發送時都不需要傳遞要發送到的端點。 – markmnl

+0

也可以使用環回地址:127.0.0.1,並連接接口。 – markmnl

回答

1

你必須與網卡IP像這樣指定IPEndPoint

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

你沒有告訴UdpClient要使用的IP。

UdpClient有一個constructor,可以採取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

我試過這個,但它不工作,任何想法? –

1

我對C#並不擅長,但我想我明白這個問題。您將udpClient綁定到端口5556,但未指定IP地址。操作系統將爲您選擇IP地址。我想它可能是192.168.1.2或192.168.1.5,你不知道哪一個。 然後使用相同的udpClient嘗試連接到監聽192.168.1.2,端口5556的遠程主機。並且可能沒有人在此處監聽。這就是您收到錯誤的原因。

我會做以下(對不起,是我不好C#技能):

  • 有兩臺udpClient的,在一個線程或程序/過程:

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

這人會監聽IP地址192.168.1.2,端口5556.

  • 在第二個線程或程序/過程:

    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) 
    

你可以在同一個線程也同時處理udpClient1和udpClient2。 重要的是,如果你連接到和(IP,端口)必須有一些應用程序/進程在那裏監聽。否則,遠程主機將發送一條ICMP消息,指示無法傳送數據報。連接被拒絕。