LabView UDP如何设置Socket接收缓冲区?

2019-07-17 15:23发布

请问下,labview的UDP函数如何加大系统缓冲区?
类似于C#中的Socket.ReceiveBufferSize,活着C++setsockopt功能,
目前发现丢包是由于发送过快,缓冲太小,想增加缓冲区,或者谁有更好的方法?拜谢各位大大。
分全都给出去了


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
咆哮森林
1楼-- · 2019-07-18 16:31
UDP的系统缓存队列与TCP的相比,有两点显著的不同:

1、UDP没有SendQ。UDP的数据包不会被处理,通过调用sendto()(或者在connect()之后也可以调用send())将数据直接发送。
2、 UDP的数据在缓存队列中是有边缘保证的,也就是说,数据包是有大小的。每次调用recvfrom()(或者在connect()之后调用recv())都会试图接收一个完整的数据包——因此,UDP程序所指定的接收缓存大小应该足够存放每一个UDP数据包,否则,多余的部分就会被抛弃,并且 recvfrom()(或recv())返回一个异常(-1,并且抛出异常代码)。


(在上图中,我们用虚线的数据包边缘表示TCP中的无边缘保证;而UDP中字节之间用虚线隔开表示UDP的数据不会以字节为单位进行传输)

此外,UDP的RecvQ还可能存在于TCP的第三个不同:我们说,UCP是无连接的,当然,我们也可以调用connect()将UDP连接起来,但是在默认无连接的情况下,UDP的RecvQ中可以缓存来自所有远程地址的数据包——这不仅仅在很多时候很不方便,如果我们只希望接收一个特定地址的数据,比如作为客户端只希望接收来自服务器的数据;而且,因为这个缓存可以被任何信息进入,从而也是一个安全隐患,很可能这个缓存在短时间内就会被垃圾信息所填满。
qiangren0523
2楼-- · 2019-07-18 18:07
 精彩回答 2  元偷偷看……
tonychen899
3楼-- · 2019-07-18 18:51
问题解决了。但是没有用labview实现。目前用的其他的开发工具实现的。
qianhaishen
4楼-- · 2019-07-18 21:34
我也碰到过类似的问题,无解。
tonychen899
5楼-- · 2019-07-19 02:33
qiangren0523 发表于 2016-9-7 10:14
http://digital.ni.com/public.nsf/allkb/D5AC7E8AE545322D8625730100604F2D?OpenDocument你可以看看这个链接,增加Socket缓冲区大小的,我觉得还是会丢包,只是减少丢包的概率而已,还可以调用第三方工具WinPcap,这个方法好像好些,但是我没有试

非常非常抱歉,我很久没上论坛了。这个问题我没有用你提供的NI的资料来解决,用其他的方法解决的,
但是你提供的这个方法其实非常好。
非常感谢,如果谁还有类似疑问,可以用这个链接提供的方法来实现。
野外老剑仙
6楼-- · 2019-07-19 02:34
tonychen899 发表于 2017-10-12 14:02
非常非常抱歉,我很久没上论坛了。这个问题我没有用你提供的NI的资料来解决,用其他的方法解决的,
但是你提供的这个方法其实非常好。
非常感谢,如果谁还有类似疑问,可以用这个链接提供的方法来实现。

您好,想问一下您是用什么方法解决的哈?

一周热门 更多>