delphi 无延迟的TIdUDPClient.ReceiveBuffer

nr7wwzry  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(236)

使用TIdUDPClient,我的应用程序通过UDP不断地向另一台运行TIdUDPServer的PC发送音频数据,这台PC运行良好。
目前,不需要返回通信,但我正在考虑一种方法,要求重新发送丢失的数据包。这将是非常罕见的,也许一个小时或更少。
我很困惑,如果接收缓冲区中没有任何东西,那么应该使用什么ReceiveTimeout值来使ReceiveBuffer()根本不会等待。我已经阅读了所有关于IdTimeoutDefault的文档,但没有任何地方说明-1的超时实际上是什么。我应该使用0吗?
此外,目前我每次都使用带有IP和端口地址的SendBuffer()。我需要使用Connect()才能接收数据吗?

dgtucam1

dgtucam11#

当Indy中的超时设置为IdTimeoutDefault(-1)时,它被视为IdTimeoutInfinite(-2)。所以是的,如果你不想让ReceiveBuffer()等待,请使用超时0。
UDP是无连接的,因此您不需要调用Connect()来接收数据包。如果忽略它,您可以从任何对等端接收数据包,这些数据包发送到您的套接字的绑定IP/端口。使用Connect()允许您只接受来自特定对等IP/端口的数据包,从其他任何地方接收的数据包将被操作系统忽略。
Connect()还允许您设置后续发送将去往的特定对等IP/端口,因此您不必在每个数据包上指定对等端。

相关问题