菜鸟问题,熟悉TCP心跳包运用的朋友请进来
其实不会用心跳包,就定义了个定时器,发送个aa就增加个timer1。tag,结果我没断开他数到30秒(我设的30秒没反映就宣布断开)就宣布断开了?可能是收数据时置timer1.tag为0没起作用,程序如下,大侠请帮忙!
procedure Tmainform.Timer1Timer(Sender: TObject);
begin
if 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;