其实不会用心跳包,就定义了个定时器,发送个aa就增加个timer1。tag,结果我没断开他数到30秒(我设的30秒没反映就宣布断开)就宣布断开了?可能是收数据时置timer1.tag为0没起作用,程序如下,大侠请帮忙!
procedure Tmainform.Timer1Timer(Sender: TObject);beginif Timer1.Tag>30  then
  begin      timer1.Enabled:=false;
     showmessage('连接断开');      timer1.tag:=0;
 end
      else       Tcpclient1.sendln('aa');
     Timer1.Tag:=Timer1.Tag+1;
  end;
end.procedure Tmainform.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
  var
  s,sre,aa:string;
  DataThread:TclientDatathread;
  begin
     DataThread:=TclientDataThread.Create(True);
     DataThread.TargetList:=infoMemo.Lines;
     StatusBar1.Panels[1].Text:='连接到'+ClientSocket.LookupHostName(ClientSocket.RemoteHost)+
     '('+ClientSocket.RemoteHost+')';
         s:=ClientSocket.Receiveln;  aa:=s;     if aa='aa' then    begin    Timer1.Tag:=0;  end;\\感觉这里没有接收到‘aa',我没断开它就弹窗口说对方连接断开了
        
    sre:=copy(s,1,3);
        if sre='***' then
     begin
s:=copy(s,4,length(s)-3);
s:=strtohexstr(s);
Application.MessageBox('收到16进制数据','接收数据类型',MB_ICONWARNING or MB_OK);
    chckbx16show.Enabled:=false;
    flag:=true;   end;
     while s<>'' do
       begin
       DataThread.ListBuffer.Add(s);
       s:=ClientSocket.Receiveln;
       end;
 DataThread.Resume;
       end;