菜鸟问题,熟悉TCP心跳包运用的朋友请进来

poplarni 2007-05-07 03:11:02
其实不会用心跳包,就定义了个定时器,发送个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;

...全文
549 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lencon 2007-05-10
  • 打赏
  • 举报
回复
QQ群 DELPHI远程监控专家论坛

本群专业讨论 计算机远程监控相关问题
本群由原来近200人精简到目前几十人的精英,淘汰了若干无助群发展的人
现在需要继续壮大本群,望有意者\高手\专家们加盟
QQ群号:29489381

务必注意:加入时请看群公告内容,否则将会取消成员资格
poplarni 2007-05-07
  • 打赏
  • 举报
回复
我这就是个收发数据然后相应处理的功能,想用心跳包不会做
ly_liuyang 2007-05-07
  • 打赏
  • 举报
回复
哦~~
用Indy好处理很多的

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧