使用TIdUDPClient
,我的应用程序通过UDP不断地向另一台运行TIdUDPServer
的PC发送音频数据,这台PC运行良好。
目前,不需要返回通信,但我正在考虑一种方法,要求重新发送丢失的数据包。这将是非常罕见的,也许一个小时或更少。
我很困惑,如果接收缓冲区中没有任何东西,那么应该使用什么ReceiveTimeout
值来使ReceiveBuffer()
根本不会等待。我已经阅读了所有关于IdTimeoutDefault
的文档,但没有任何地方说明-1的超时实际上是什么。我应该使用0吗?
此外,目前我每次都使用带有IP和端口地址的SendBuffer()
。我需要使用Connect()
才能接收数据吗?
1条答案
按热度按时间dgtucam11#
当Indy中的超时设置为
IdTimeoutDefault
(-1)时,它被视为IdTimeoutInfinite
(-2)。所以是的,如果你不想让ReceiveBuffer()
等待,请使用超时0。UDP是无连接的,因此您不需要调用
Connect()
来接收数据包。如果忽略它,您可以从任何对等端接收数据包,这些数据包发送到您的套接字的绑定IP/端口。使用Connect()
允许您只接受来自特定对等IP/端口的数据包,从其他任何地方接收的数据包将被操作系统忽略。Connect()
还允许您设置后续发送将去往的特定对等IP/端口,因此您不必在每个数据包上指定对等端。