gpt4 book ai didi

delphi - Indy UDP发送和响应简单字符串

转载 作者:行者123 更新时间:2023-12-02 03:15:07 43 4
gpt4 key购买 nike

我正在使用 Delphi 10.0 西雅图。

我想向 UDP 服务器发送请求,然后读取服务器响应,这是一个简单的字符串:

Client side:send('12345')
server side(onread event or whatever):if received string = ('12345') then
send ('jhon|zack|randy')
else disconnect;

响应字符串的长度是可变的。

服务器在具有开放连接(专用 vps)且良好开放的网络上运行。 客户端不一样,它位于路由器和安全网络后面(不转发)。

到目前为止,我只能发送客户端的请求:

(uc=idUDPclient)

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
if uc.Connected =False then
Uc.Connect;
uc.Send('12345');
uc.ReceiveTimeout := 2000;
s:=uc.ReceiveString() ;
ShowMessage(s);
uc.Disconnect
end;

服务器端(us=idUDPserver)

procedure TForm1.usUDPRead(AThread:TIdUDPListenerThread;const AData: TIdBytes;ABinding: TIdSocketHandle);
begin
ShowMessage(us.ReceiveString());

if us.ReceiveString() = '12345' then
begin
ShowMessage(us.ReceiveString());

//respond with a string to the client immediately (behind a routers) how ?
end;

我不知道TCP是否更好,以及如何使用它。

Android 将参与其中。

最佳答案

您没有正确使用 TIdUDPServer.OnUDPRead 事件。您需要删除对 ReceiveString() 的调用,它们不属于那里。请改用 AData 参数,它包含客户端请求的原始字节。 TIdUDPServer 在触发事件处理程序之前已经读取了客户端的数据。

如果您需要字符串中的字节,可以使用Indy的BytesToString()函数或IIdTextEncoding.GetString()方法。

要将响应发送回客户端,请使用ABinding参数。

试试这个:

procedure TForm1.usUDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
var
s: string;
begin
s := BytesToString(AData);
//ShowMessage(s);
if s = '12345' then begin
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, 'jhon|zack|randy', ABinding.IPVersion);
end;
end;

关于delphi - Indy UDP发送和响应简单字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44814015/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com