我创建了一个UDP客户端,用于在C#中从主机接收信息。 我在while循环中使用Receive()方法从服务器获取数据。但我的时机存在一些问题。
从服务器发送数据包的速率大约是10ms,每当数据包计数达到32(= 320 ms)时,我就会发生SubFrameReady事件。 问题是这个事件每1毫秒提高!!由于UDP处于while循环中,UDP会一遍又一遍地接收相同的数据包吗? 这是代码:
private void threadFunction()
{
byte[] rcvBuff;
int start = XDef.HEADER_LENGTH;
int end = _imgWidth * _bytesPerPixel + XDef.HEADER_LENGTH;
startFrameData();
while (true)
{
rcvBuff = imgListener.Receive(ref localEp);
for (int i = 0; i < 8; i++)
{
imgHeader[i] = rcvBuff[i];
}
for (int i = start; i < end; i += 2)
{
_rawLineData[byteCounter] = rcvBuff[i] + rcvBuff[i + 1] * 256;
_lineData[byteCounter] = (byte)(_rawLineData[byteCounter] * 255 / 65535);
byteCounter++;
}
lineCounter++;
// Thread.Sleep(5);
if (lineCounter % _subFrameHeight == 0)
{
byteCounter = 0;
if (SubFrameReady != null)
SubFrameReady.Invoke(this, null);
if (lineCounter % _imgHeight == 0)
{
if (FrameReady != null)
FrameReady.Invoke(this, null);
}
}
}
}
答案 0 :(得分:0)
其实我得到了答案。 时机非常好。问题是我在尝试分析时间时调试应用程序,并设置了断点。 我认为UDP Client类中的缓冲区会在应用程序暂停时保存即将到来的数据,然后尽快加载带有该数据的Receive()方法,这就是我获得1ms时间范围的原因。
非常棘手!