用Tserversocket采用非阻塞方式于客户电脑连接进行会话
Tserversocket采用多线程发送信息
当客户端正常端开时,TSERVERSOCKET能在ONCLIENTDISCONNECT中处理
但当客户端非法终止,比如死机、掉网等,Tserversocket就无法获得这个消息了请问该如何处理才能判断或检测到客户已经端开
我用
 var x:integer;
begin
 for x:=0 to serversocket3.Socket.ActiveConnections-1 do
   begin
     if serversocket3.Socket.Connections[x].Connected then
          memo1.Lines.Add('检查:'+inttostr(serversocket3.Socket.Connections[x].Remoteport)+'在')
     else
          memo1.Lines.Add('检查:'+inttostr(serversocket3.Socket.Connections[x].Remoteport)+'不在')
   end;
 label9.Caption:=inttostr(serversocket3.Socket.ActiveConnections);
end;运行结果:全是“在”

解决方案 »

  1.   

    呵呵,因为非法中断后并没通知你它的CONNECTED=false,所以你只能找到的是在了,你要做个轮询看它在不在,而不是被动的得到它在不在
      

  2.   

    你那样做,客户端在异常的时候根没有发结束标止回来,所以serversocket里面还是认为他是连接的
      

  3.   

    采取握手方式嘛用一Trimer
    额户端定时发一信号到服务端如果服务端在一定时间内没收到,则表示断开
    你搜一下以前的贴子,有很多类似的贴子