5

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

当前网络设置

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

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

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

由于目标机器主动拒绝,无法建立连接

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

4

3 回答 3

1

你必须IPEndPoint像这样指定一个网卡IP:

var endpoint = new IPEndPoint(IPAddress.Parse("192.168.1.2"), portNum);
UdpClient client = new UdpClient(endpoint);
于 2013-10-27T21:52:58.897 回答
1

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

UdpClient有一个可以采用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);
于 2013-10-27T21:53:12.180 回答
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 消息,指示无法传递数据报。连接被拒绝。

于 2013-10-28T21:33:05.633 回答