几点看法:
1、一个服务器端与多个客户端相连。这种情况下,应该使用阻塞(也就是多线程)方式通讯。
2、在有Timer的情况下作断点调试恐怕不成,应该Timer实际上是一个线程。判断是否断线,大可不必使用Timer,仅仅从效率方面来说吧:断线的可能性是很小的,那么你的Timer几乎等于在浪费资源。使用ClientSocket的OnError和ServerSocket的OnClientError就行了。—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
             毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
  I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”或者去掉';
I.Desire := '加不加分随你';
—————————————————————————————————
    

解决方案 »

  1.   

    几点看法:
    1、一个服务器端与多个客户端相连。这种情况下,应该使用阻塞(也就是多线程)方式通讯。
    2、在有Timer的情况下作断点调试恐怕不成,应该Timer实际上是一个线程。判断是否断线,大可不必使用Timer,仅仅从效率方面来说吧:断线的可能性是很小的,那么你的Timer几乎等于在浪费资源。使用ClientSocket的OnError和ServerSocket的OnClientError就行了。—————————————————————————————————
    MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
                 毁誉由人,望天上云卷云舒,聚散任风。';
    if Not Assigned(I) then
      I := TI.Create(Nil);
    I.Maxim := MaximStr;
    I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”或者去掉';
    I.Desire := '加不加分随你';
    —————————————————————————————————
        
      

  2.   

    那请问一下serversocket的onclienterror究竟是在什么情况下发生呢。
    我将TIMER事件已经屏蔽了,procedure Tmanageform.ServerSocket2ClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    var tmp:variant;
    begin   try
         errorcode:=0;
         tmp:=socket.RemoteAddress;
         showmessage(tmp+'掉了');
       except   end;end;
    这是这段代码,但是在拔掉网线后根本没反应,不知是为什么,请大家帮个忙看看吧,谢谢了!
      

  3.   

    如果服务器端Socket对象在建立,使用或终止与某客户的连接时出现错误,将触发OnClientError事件
    OnClientError事件属于TSocketErrorEvent类型
      

  4.   

    使用Tserversocket和Tclientsocket采用非阻塞方式进行通讯
      

  5.   

    同意第二种看法,用timer游丝阿多余
      

  6.   

    由于我对线程不是太熟,麻烦哪位好心人帮帮忙,我不知该在EXECUTE里写什么代码好,能否给点提示,谢谢了!