我目前正在我的机器上开发一个带有2个网络接口的网络应用程序,具有以下设置 -
我想使用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),它不再起作用了...... 我猜它是在错误的适配器上发送的? 这是因为我的默认网关是相同的还是我做错了什么? 我是开发基于网络的应用程序的新手......
答案 0 :(得分:1)
您必须使用以下网络卡IP指定IPEndPoint
:
var endpoint = new IPEndPoint(IPAddress.Parse("192.168.1.2"), portNum);
UdpClient client = new UdpClient(endpoint);
答案 1 :(得分: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);
答案 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消息,指示无法传送数据报。连接被拒绝。