0

我有一个 Delphi 6 应用程序,它通过套接字与外部硬件设备交换音频数据。硬件设备内部存在问题,有时其内部缓冲区处理速度会变慢,尤其是在长时间使用期间,并且令人讨厌的延迟会蔓延到音频流中。这是一个重大问题,因为音频数据经常是人们之间双向实时对话的基础。但是,断开连接并重新建立连接可以解决问题。

我知道如何用 Indy 关闭/断开套接字,这很容易。我担心如果我尝试重新连接太快,Indy 中的某些连接缓存机制或 Windows 套接字层本身可能会破坏我的断开连接。有没有办法确保与外部硬件设备的套接字连接真正断开?最好问一下,有没有办法确保我的重新连接尝试强制创建一个新的套接字(句柄?)而不是重新使用旧的套接字连接?

外部硬件设备仅在创建全新连接时“重置”,可能是因为它刷新其内部队列并重新开始(我的猜测是因为我没有设备的源代码)。

4

1 回答 1

3

Indy 不会阻止您立即重新连接。Windows 唯一会这样做的情况是,如果您每次都为客户端分配相同的本地端口以绑定到。在这种情况下,您必须等待 Windows 释放该端口以供重复使用。您可以手动设置套接字的延迟选项以禁用 Windows 的延迟并立即释放。或者不分配本地端口,每次(重新)连接时都会使用一个随机端口。

于 2012-06-07T01:15:36.340 回答