您可以在许多地方找到这个C#UDP示例的各种形式。在
UdpClient udpc = new UdpClient(55001);
IPEndPoint iep = new System.Net.IPEndPoint(IPAddress.Parse("192.168.1.100"), 55001);
byte[] data = udpc.Receive(ref iep);
string req = Encoding.ASCII.GetString(data);
当我运行portqry时,我发现它响应127.0.0.1,而不是192.168.1.100。在
^{pr2}$我也尝试过使用原始套接字接口。只有绑定到127.0.0.1和PortQry相同的时候,我才能让它工作。在
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 55001);
Socket sock = new Socket(ipe.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
byte[] buffer = new byte[1024];
sock.Bind(ipe);
sock.Receive(buffer);
string req = Encoding.ASCII.GetString(buffer);
当我使用端口192.168.1.100运行Python UDP receiver示例时,我发现它响应的是192.168.1.100,而不是127.0.0.1。在
在另一台机器上,我添加了一条路由,这样到192.168.1.100的流量将输出到路由器,然后返回。在wireshark中,使用Python服务器,我看到一个数据包被发送到路由器,当我portqry192.168.1.100时,一个包返回。在C示例中执行相同的操作时,数据包不会返回。在
有什么不同?无线适配器和VPN适配器已关闭;因此,应该只使用一个接口。我想把我在Python中看到的行为用C来表示,这样我就可以看到来自WinPcap的流量。在
我有一些额外的信息。我已经用this exact code在底层winsock库中尝试过,除了更改IP和端口。问题是一样的。我只能在环回上接收。我已经用netstat验证了192.168.100上的端口是否被监听。我还发现python receive示例将接受UDP通信,即使我物理上断开以太网连接,ipconfig显示根本没有IP。在
您的代码不会告诉
UdpClient
使用什么IP地址。您创建的IPEndPoint
实际上并没有在任何地方使用。你应该用它来监听那个IP:这样您就可以在特定的主机和端口上接收,而不仅仅是在环回地址上。在
相关问题 更多 >
编程相关推荐