Delphi 启动器中的udp问题

Delphi 启动器中的udp问题,delphi,delphi-10.1-berlin,Delphi,Delphi 10.1 Berlin,是否可以检查我们是否与服务器没有任何连接?我写了这段代码。我知道UDP没有这个功能,但我想用UDP来实现 procedure TForm1.Button4Click(Sender: TObject); var Reg : TRegistry; odebrany,lgraczy,mgraczy,hostname:string; begin Application.Title:=Caption; UDPClient.ReceiveTimeout := 2000; UDPClien

是否可以检查我们是否与服务器没有任何连接?我写了这段代码。我知道UDP没有这个功能,但我想用UDP来实现

procedure TForm1.Button4Click(Sender: TObject);
var
  Reg : TRegistry;
  odebrany,lgraczy,mgraczy,hostname:string;
begin
  Application.Title:=Caption;
  UDPClient.ReceiveTimeout := 2000;
  UDPClient.Host:=IdIPWatch1.LocalIP;
  UDPClient := TIdUDPClient.Create(Self);
  UDPClient.Active := True;
  StrList.Lines.Text:= ip;
  StrList.Lines.Text:=StringReplace(StrList.Lines.Text, '.', #13, [rfReplaceAll]);
  Buffer := 'SAMP' + Chr(StrToIntDef(StrList.Lines[0], 100)) + Chr(StrToIntDef(StrList.Lines[1], 100)) + Chr(StrToIntDef(StrList.Lines[2], 100)) + Chr(StrToIntDef(StrList.Lines[3], 100));
  //Port >> 8 + i
  Buffer := Buffer + Chr(port and 255) + Chr((port shr 8) and 255)+ 'i';
  UDPClient.Send(ip,port,Buffer);
  odebrany:=UDPClient.ReceiveString();
  /**/When odebrany take string program crash here!-**---------------------------------------
  if ( Trim(odebrany) = '' ) then
  begin
    ShowMessage(error);
    ShellExecute(Handle, 'open', 'cmd.exe', '/c taskkill /F /IM launcher.exe /T' , nil, SW_HIDE);
  end;
end;
我试过了,但没用

if ( Trim(odebrany) = '' ) then
begin
  ShowMessage(error);

因为程序提前停止。

UDP中没有“连接”。如果您没有从服务器得到响应,那么服务器没有运行,或者它忽略了您,或者网络正在丢弃数据包。如果
ReceiveString()
ReceiveTimeout
期间内没有收到响应,它只返回一个空字符串。那么你的实际问题到底是什么呢?你到底查询的是哪种UDP服务器?我的问题是有一个函数可以检查字符串是否为“空白”我想用它来执行“关于服务器没有响应的错误消息”。当我没有使用ReceiveString()进行任何“数据包返回”时,我的程序将崩溃。您已经在检查空白字符串(您不需要
Trim()
)。到底是什么样的碰撞?实际的错误消息是什么?哪一行代码引起了错误?你需要更具体一些。我在这段代码中没有看到会因为接收到空白字符串而崩溃的内容,所以它必须是您没有显示的代码nbtw,每次单击
按钮4
时,您都会泄漏
TIdUDPClient
对象。你为什么要在这段代码中调用
TIdUDPClient.Create()
?显然,
UDPClient
是表单的成员,那么您是否在设计时创建
TIdUDPClient
?如果是这样,则不应创建新对象。如果没有,则在创建对象之前不应设置
ReceiveTimeout
Host
。当odebrany:=UDPClient.ReceiveString()时,我的程序将崩溃;在这之后没有任何回应:P