使用以下代码:
UdpClient Sender = new UdpClient();
try
{
Sender.Send(Encoding.ASCII.GetBytes(msgOut), msgOut.Length, ip);
}
我正在尝试将对先前请求的回复发送回同一个ip / port。 在同一台电脑上工作时 它只有在我自定义localhost的值时才会起作用,因为当我在NAT中声明我自己的计算机IP时它甚至都不起作用。
关于它的两个事实:
1)相同的ip / port值在我的c ++版本上运行得非常好。 (甚至在全球范围内)使用下一个代码:
sockaddr_in si_custom;
int s_custom;
//create socket
if ((s_custom = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR)
{
//socket fail
return false;
}
//setup address structure
memset((char *)&si_custom, 0, sizeof(si_custom));
si_custom.sin_family = AF_INET;
si_custom.sin_port = htons(stoi(port));
si_custom.sin_addr.S_un.S_addr = inet_addr(ip.c_str());
//send the message
if (sendto(s, msg.c_str(), msg.size(), 0, (struct sockaddr *) &si_custom, slen) == SOCKET_ERROR)
{
closesocket(s_custom);
return false;
}
closesocket(s_custom);
return true;
2)在防火墙中启用靠近远程相关的任何东西后, 我的wireshark数据包嗅探器告诉我,我的数据包会让我的计算机完全正常。
我试图弄清楚,为什么c#udpClient类的行为与我的c ++ Udp代码不同,因为我的路由器拒绝通过第一个并同意通过后者。
提前致谢。
答案 0 :(得分:0)
使用我自己的Ip:port初始化UdpClient Sender对象解决了问题
UdpClient Sender = new UdpClient( new IPEndPoint(MyIP,MyPort));