问题1:
当UDP包以很高的数据速度(大于2Mb/s)传入时,数据包开始丢失,尤其当CPU还需要处理其他的任务时。
解答:
当UDP数据包传输速率足够大时,Labview将无法维持UDP的套接字缓冲区。这个问题只有当labview把缓冲区中的数据转移到队列或者写入文件中时发生。那么,可以通过增加操作系统的套接字缓冲区的大小来解决这个问题,这样会提供更多的时间让labview来处理缓冲区的数据,保证在套接字缓冲区溢出之前读取数据。
以上为NI官网的回答。
但在实际的使用过程中,这个缓冲区的大小是不能设置的,推断以上说明不能实施。
问题2
“增加操作系统的套接字缓冲区的大小”如何实现?
问题3
在LabVIEW中使用UDP
UDP不是基于连接的协议,如TCP,因此无须在发送或接收数据前先建立与目的地址的连接。但是,需要在发送每个数据报前指定数据的目的地址。操作系统不报告传输错误。
使用打开UDP函数,在端口上打开一个UDP套接字。可同时打开的UDP端口数量取决于操作系统。“打开UDP”函数用于返回唯一指定UDP套接字的网络连接句柄。该连接句柄可在以后的VI调用中引用这个套接字。
写入UDP函数用于将数据发送到一个目的地址,读取UDP函数用于读取该数据。每个写操作需要一个目的地址和端口。每个读操作包含一个源地址和端口。UDP会保留为发送命令而指定的数据报的字节数。
理论上,数据报可以任意大小。然而,鉴于UDP可靠性不如TCP,通常不会通过UDP发送大型数据报。
当端口上所有的通信完毕,可使用关闭UDP函数以释放系统资源。