UDP数据接收的问题
大家好!我用CreateUDPChannelConfig函数,并设置了回调函数UDPReadCallback,然后客户端给我发送数据,每100ms发送4K的数据。在回调函数中有事件UDP_DATAREADY,但是该事件触发的时候我用udpRead函数只能收到几十个字节,虽然后来会不停的触发直到4K都到达,但这样处理起来很困难。想问问大家是什么原因,或者有什么好的解决办法 谢谢啦
。 因为网络通讯有许多不确定因素,实时性要求很难达到!
最好将程序上传,以便于分析! 其实很简单只是刚开始写udpread()函数是这样的:
int CVICALLBACKUDPReadCallback (unsigned channel, int eventType, int errCode, void *callbackData)
{
int error = 0,
size;
unsigned char *msg = NULL;
if (eventType == UDP_DATAREADY)
{
// Pass NULL as the input buffer to determine the size of the arrived data.
size = UDPRead(channel, NULL, 0,UDP_DO_NOT_WAIT , NULL, NULL);
msg = calloc(size ,1);
// Read the waiting message into the allocated buffer.
size = UDPRead(channel, msg, size ,UDP_DO_NOT_WAIT , NULL, NULL);
if(size<0)
{
return 0;
}
else
{
ProcessMsg(msg,size);
}
}
return 0;
} 因为你调用UDPRead()的参数为:
UDPRead(channel, NULL, 0,UDP_DO_NOT_WAIT , NULL, NULL);
即指定接收缓冲区大小为0,而且,一有数据就读取!这样程序就会反复读取,而且每次读取的数据都不确定!
你必须指定,*msg、size和timeout(不能设为UDP_DO_NOT_WAIT )才行! 4# netcreature
改了接收字节的大小 并且将延时设置为最大的5秒 得到的size为70多字节
是不是createUDPchannelconfig中回调函数的 触发事件UDP_DATAREADY就有问题?它是不是只要有数据就触发,而不是收完一包才触发? UDP_DATAREADY表示每收到一个数据包就触发一次! 好了具体原因也不是很清楚
我测试环境为 本机 ,用的 网络调试助手 给自己发送的数据。
奇怪的是发送的数据包不同,第一次触发收到的字节数也不同。可能是调试助手的问题。
用别人的机子发送没有影响了、
但确实有最大缓冲的问题,发送的数据包更大的时候还是要考虑 分包 的问题。
netcreature,谢谢allqq-mogudiandian-35all 呵呵...
应该也不能都说是调试助手的问题吧,它和本机调试环境也有关!
我以前做串口通讯是有本机调试(自发自收)也出现过一些莫名其妙的问题,但在联机调试时却从未再次出现!
页:
[1]