我正在尝试在 Delphi 中使用 TUdpSocket。我想要做的是连接到 UDP 服务器,发送一些数据并等待应答。数据发送正确,但控件没有收到任何东西。我不知道为什么。我已经为这个问题苦苦挣扎了好几个小时了,我要放弃了:-(。
我尝试使用 TIdUDPClient,但情况是一样的。数据发送正确,但没有收到。
只有 TIdUDPServer 或多或少地正常工作,因为它既发送数据又接收数据。不幸的是,数据接收由一个单独的线程(主线程或其他线程,取决于 ThreadedEvent 属性)处理,这迫使我使用同步并使整个代码复杂化。我想在我自己的线程中处理 UDP 连接。只需发送一些数据并调用 WaitForData() 来等待答案,然后在同一个线程中处理它。
如果可能的话,我不想使用任何第三方控件,但如果这是唯一的解决方案,我接受它。
非常感谢您提前提供的帮助。
- - 例子 - -
i) TUDPSocket:
var
lR, lW, lE: boolean;
begin
UdpSocket1.LocalPort := '1600';
UdpSocket1.RemotePort := '1600';
UdpSocket1.RemoteHost := '127.0.0.1';
UdpSocket1.Connect;
UdpSocket1.Sendln('test');
UdpSocket1.Select(@lR, @lW, @lE, 2000);
if lR then
ShowMessage(UdpSocket1.Receiveln());
end;
如您所见,控件应该接收它传输的数据。显然它确实如此,因为在调用 Select() 方法后 lR 的计算结果为 true。但是 Receiveln() 返回一个空字符串,就像 ReceiveBuf() 一样。当我启动一个 UDP 服务器并向它发送一些数据时,它会被正确接收,所以我确定数据真的被发送了。