具有多个网络的UDP网络

时间:2013-10-27 21:27:03

标签: c# network-programming udp

我目前正在我的机器上开发一个带有2个网络接口的网络应用程序,具有以下设置 -

Current network setting

我想使用IP 192.168.1.2的第一个配置发送UDP消息。

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

当我尝试这个时,我收到以下错误 -

  

无法建立连接,因为目标计算机是主动的   拒绝了

奇怪的是,当我禁用我的其他网络时,这种方式完美但有2个连接(局域网和WiFi),它不再起作用了...... 我猜它是在错误的适配器上发送的? 这是因为我的默认网关是相同的还是我做错了什么? 我是开发基于网络的应用程序的新手......

3 个答案:

答案 0 :(得分:1)

您必须使用以下网络卡IP指定IPEndPoint

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

答案 1 :(得分:1)

您没有告诉UdpClient要使用哪个IP。

UdpClientconstructor,可以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);

答案 2 :(得分: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消息,指示无法传送数据报。连接被拒绝。