我设置了一个非常简单的UdpClient以尽可能快地接收8个字节的数据。客户端发送数据的速度非常快,但服务器以大约0.5秒的非常不连续的间隔接收数据。它在接收时停止,然后突然以非常快的速度接收大约10个数据报,然后再次停止约0.5秒,依此类推。这里可能是什么问题?香港专业教育学院试图关闭防火墙,但它并没有帮助...Udp Socket稳定发送,突发接收
客户:
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
此代码是不断发出的累计缓冲区:
if (!_sending)
{
_sending = true;
SocketAsyncEventArgs args = new SocketAsyncEventArgs();
args.Completed += (s2, e2) => { _sending = false; };
args.RemoteEndPoint = new IPEndPoint(IPAddress.Parse("192.168.0.100"), 14123);
args.SetBuffer(buffer, 0, buffer.Length);
_socket.SendToAsync(args);
}
服务器:
UdpClient udp = new UdpClient(new IPEndPoint(IPAddress.Parse("192.168.0.100"), 14123));
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
byte[] buffer = udp.Receive(ref endpoint);
int x = BitConverter.ToInt32(buffer, 0);
int y = BitConverter.ToInt32(buffer, 4);
Console.WriteLine(string.Format("Receiving x={0}, y={1} @ {2}", x, y, DateTime.Now.Ticks));
}
我现在知道它非常原始的代码,但它至少不会抛出任何例外......
我用Wireshark检查过,但我不确定到底要找什么。 UDP消息得到发送好,没有打嗝。
我读过它的一个好主意,扼杀UDP并不尽快发送。我确实尝试过,没有任何明显的差异。发送速度较慢,但接收像以前一样粗糙/突然。
客户端和接收器都在同一个开发机器上(Windows 7)。
下面是测量接收呼叫之间的时间的一些输出。正如你可以看到它卡住一秒钟大约每30次迭代:
1,0180582
0,001
0
0
0,0010001
0
0
0
0
0,0010001
0
0
0
0
0
0
0
0
0
0
0,0010001
0
0
0
0
0
0,0010001
1,0170582
等
更新缓冲区发送后出现
它看起来像延迟。发送代码似乎非常迅速/流畅地发送缓冲区,但是当它们出现在Wireshark中时,它们每秒的udp触发都会有1秒的延迟。接收的代码似乎不会延迟这个延迟,它已经准备好了。我没有明白。
用wireshark(http://www.wireshark.org/)看看网络上发生了什么,发布你的代码。 –
是否按预期发送消息(即低延迟)?或者它们在Wireshark中“波涛汹涌”?如果是,那么发送的代码是不好的。如果他们不是,那么接收的代码是不好的。 –
Wireshark中的列表似乎也在小时间间隔(〜0.2秒)内得到更新,但是我的消息在WS和接收器中肯定更加流畅。发送代码运行速度快,流畅。但我没有看到接收代码有什么问题。没有太多的代码。 –