【问题标题】:Client sends a UDP Packet to a server over the internet, but it could not recieve any UDP packages from the server客户端通过 Internet 向服务器发送 UDP 数据包,但无法从服务器接收任何 UDP 数据包
【发布时间】:2013-08-28 11:02:48
【问题描述】:

客户端通过互联网向服务器发送 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);

我的网卡 IP 是 169.254.254.5,但是服务器显示我的 IP 是 188.136.170.14 并发送回复到 188.136.170.14(188.136.170.14 是接入点的 IP)。如何更改服务器端的代码以正确将银行数据包发送到客户端?

【问题讨论】:

  • 尝试使用像 tcpview 这样的网络分析器

标签: c# sockets udp


【解决方案1】:

按接入点,那是您的路由器吗?你说的是ADSL,所以我假设它是。

您的路由器跨越 2 个网络。互联网以您的 ISP 的形式位于一侧,而您的内部网络位于另一侧。这就是为什么服务器会看到您的路由器 IP,而不是您的 NIC IP。

您需要在路由器上定义端口转发规则,以便将您正在使用的端口上的入站流量发送到您的 PC。也不要使用广播 - 这是为了联系子网上的多个 NIC。

严格来说,这更多是网络问题,而不是编程问题。

【讨论】:

    【解决方案2】:

    SocketOptionName.Broadcast 不在互联网上使用。通过互联网的 UDP 仅适用于对等点。

    【讨论】:

    • 我的网卡 IP 是 169.254.254.5,但是服务器显示我的 IP 是 188.136.170.14 并发送回复到 188.136.170.14(188.136.170.14 是接入点的 IP)。如何更改服务器端的代码以正确地将数据包发送到客户端?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多