【发布时间】:2011-08-14 23:39:34
【问题描述】:
我目前正在开发一个服务器客户端应用程序。服务器通过 WAN 正常接收数据,客户端似乎接收到数据,但客户端只接收一次通信。 WAN上是否有任何东西会使客户端始终只接收第一个返回的UDP通信而没有后续的。谢谢您的帮助。
客户端 UDP 监听代码
private void receiveUDP()
{
System.Net.IPEndPoint test = new System.Net.IPEndPoint(System.Net.IPAddress.Any,UDP_PORT_NUMBER);
System.Net.EndPoint serverIP = (System.Net.EndPoint)test;
server.Bind(serverIP);
//server.Ttl = 50;
EndPoint RemoteServ = (EndPoint)listenUDP;
do
{
byte[] content = new byte[1024];
int data = server.ReceiveFrom(content, ref RemoteServ);
string message = Encoding.ASCII.GetString(content);
ProcessCommands(message);
} while (true);
}
【问题讨论】:
-
很难说。你能发布你的客户端程序的代码吗?
-
@Hunter McMillen 已编辑以包含客户端监听代码。如果您需要查看更多内容,请告诉我,我会发布更多内容。
-
这是设计使然。发送器和接收器之间的许多机器中的任何一个都可以在没有诊断的情况下丢弃数据包。不可能找出谁和为什么。如果无法处理,请使用 TCP。
-
您是否验证过服务器在第一个数据包之后确实发送了一些数据?你能用 Wireshark 或类似的工具看看网络上发生了什么吗?
-
好的......你写的一切都说它应该工作并且除了丢失的数据之外没有其他症状......不包括理论选项(给出的信息的一些微妙部分不准确)这个意味着我们在这里遗漏了一些重要信息(代码和/或错误消息和/或一些 Wireshark 诊断的异常),或者只是 UDP 在您的特定网络配置中由于某种原因不可靠(即被某些防火墙阻止) )
标签: c# sockets network-programming udp wan