tserversocket判断客户端状态

浅谈socket编程心得

做了好一阵的socket通信,觉得网络通信这东西真是不怎么好弄,感觉很多都不在自己的控制当中。尤其对于 实时系统来说,如何保证不丢一条数据,如何管理每个客户端的连接真是不那么简单。我为此苦恼困惑了很久, 可以说现在我还是有很多不解的地方。我只说说我遇到的一些问题和解决方法。希望可以帮助到有需要的人。

  我用的是delphi的tserversocket和tclientserver进行的数据传输编程。编程过程中遇到的问题:

1、 服务器怎么判断客户端的状态,好释放相应的变量,内存?

  这个问题直到现在我还是不能及时判断出。当客户端正常关闭时。我可以知道,但是当客户端网络断了的话。我就无法判断出。我采用大多数人用到的”心跳“方法。就是每隔几秒种向客户端发送一个确认信息。

i:=tserversocket.socket.sendtext('ddd');

如果i<0就认为客户端断开了。关闭相应的socket。tserversocket有一个属性很有用。connected。在正常情况下可以帮助我们知道客户端是否连接。在加上心跳就可 以全部判断处理了。部分代码。

     if session[i].Csocket.Connected =true then    

 //主要是客户端不正常断开的时候用到
       ret:=session[i].Csocket.SendText('卫星实时系统检测客户端连接情况') 
     else
     begin
        if assigned(Fclientclose) then
        OnWellDisConnect(Self,session[i].Cwell);

     end;
  end;

  if ret<0 then
  raise Emiss.create('网络出错');
  end;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值