cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 2613|回复: 7

UDP数据接收的问题

[复制链接]
发表于 2009-2-18 08:52:21 | 显示全部楼层 |阅读模式
大家好!
我用CreateUDPChannelConfig函数,并设置了回调函数UDPReadCallback,然后客户端给我发送数据,每100ms发送4K的数据。在回调函数中有事件UDP_DATAREADY,但是该事件触发的时候我用udpRead函数只能收到几十个字节,虽然后来会不停的触发直到4K都到达,但这样处理起来很困难。想问问大家是什么原因,或者有什么好的解决办法 谢谢啦
发表于 2009-2-18 09:02:26 | 显示全部楼层
因为网络通讯有许多不确定因素,实时性要求很难达到!
最好将程序上传,以便于分析!
 楼主| 发表于 2009-2-18 09:12:31 | 显示全部楼层
其实很简单  只是刚开始写  udpread()函数是这样的:
int CVICALLBACK  UDPReadCallback (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;
}
发表于 2009-2-18 09:39:36 | 显示全部楼层
因为你调用UDPRead()的参数为:
UDPRead(channel, NULL, 0,  UDP_DO_NOT_WAIT , NULL, NULL);
即指定接收缓冲区大小为0,而且,一有数据就读取!这样程序就会反复读取,而且每次读取的数据都不确定!
你必须指定,*msg、size和timeout(不能设为UDP_DO_NOT_WAIT )才行!
 楼主| 发表于 2009-2-18 10:15:13 | 显示全部楼层
4# netcreature
改了接收字节的大小 并且将延时设置为最大的5秒 得到的size为70多字节
是不是createUDPchannelconfig中回调函数的 触发事件  UDP_DATAREADY就有问题?它是不是只要有数据就触发,而不是收完一包才触发?
发表于 2009-2-18 11:53:12 | 显示全部楼层
UDP_DATAREADY表示每收到一个数据包就触发一次!
 楼主| 发表于 2009-2-18 16:33:07 | 显示全部楼层
好了  具体原因也不是很清楚
我测试环境为 本机 ,用的 网络调试助手 给自己发送的数据。
奇怪的是发送的数据包不同,第一次触发收到的字节数也不同。可能是调试助手的问题。
用别人的机子发送没有影响了、
但确实有最大缓冲的问题,发送的数据包更大的时候还是要考虑 分包 的问题。
netcreature,谢谢

评分

参与人数 1经验 +10 收起 理由
netcreature + 10 希望对别人有所启示!

查看全部评分

发表于 2009-2-19 08:49:51 | 显示全部楼层
呵呵...
应该也不能都说是调试助手的问题吧,它和本机调试环境也有关!
我以前做串口通讯是有本机调试(自发自收)也出现过一些莫名其妙的问题,但在联机调试时却从未再次出现!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-21 08:07 , Processed in 0.999507 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表