客户端通过internet向服务器发送UDP数据包,但无法从服务器接收任何UDP数据包
本文关键字:数据包 服务器 UDP 任何 客户端 internet | 更新日期: 2023-09-27 18:29:29
客户端通过互联网向服务器发送UDP数据包,但无法从服务器接收任何UDP数据包。
服务器有一个有效的IP,我通过ADSL 连接到互联网
在服务器和客户端中都使用这些代码:
发送数据包:
Socket sock1 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep1 = new IPEndPoint(IPAddress.Parse(txt_IP.Text), Convert.ToInt32(txt_SendPort.Text));
byte[] data = Encoding.ASCII.GetBytes("UDP");
sock1.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
sock1.SendTo(data, iep1);
接收数据包:
Console.WriteLine("Listening to the port {0}", PortNumber);
sock1 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, PortNumber);
sock1.Bind(iep);
EndPoint ep = (EndPoint)iep;
byte[] data1 = new byte[100];
int recv = sock1.ReceiveFrom(data1, ref ep);
sock1.Close();
String str_Data = Encoding.ASCII.GetString(data1, 0, recv);
String str_IP = ep.ToString().Substring(0, ep.ToString().IndexOf(":"));
Console.WriteLine("Received Succesfully: {0} - {1}", str_Data, str_IP);
我的NIC IP是169.254.254.5,但服务器显示我的IP是188.136.170.14,并发送回复到188.136.17014(188.136.17.014是接入点的IP)。如何更改服务器端的代码以正确地将数据包发送到客户端?
根据接入点,那是你的路由器吗?你说的是ADSL,所以我想是的。
您的路由器跨越2个网络。互联网是以你的ISP&你的内部网络在另一边。这就是为什么服务器看到你的路由器IP,而不是你的NIC IP。
你需要在路由器上定义一个端口转发规则,以将你正在使用的端口上的入站流量发送到你的电脑。也不要使用广播-这是为了联系子网上的多个NIC。
严格来说,这更多的是网络问题,而不是编程问题。
SocketOptionName.Broach不在互联网上使用。通过互联网的UDP只适用于对等端。