客户端定时发送数据给服务器端
如果server端异常断开后idclient端总是报错?
那位高手指点,谢谢

解决方案 »

  1.   

    我就是不想让她报错!,想让客户端检测到服务器已经断开了!请问怎样解决?
    好像问题出在定时发送接受上,就连indy/Domes/chat都有这样的问题,server端不能先掉线,
    我总不能保证网络总是通畅!我试着在onDisconnected里写代码让定时器停掉可是还是有问题,
    还是过用try/except做异常处理也不行!
      

  2.   

    高手们指点一下吧,谢了
    我差了很多例程,都没有考虑服务器端先掉线怎么办!都是报错
    我要做一个监控通信软件,客户端每0.5秒给服务器发送信息(最多有15个客户端),服务器端接收并显示
    然后再做判断发给另外的客户端
    请问用idtcpserver/idtcpclient可以满足要求吗?
    我是第一次用indy开发通讯软件
    帮帮我吧!!!!
      

  3.   

    可以
    你可以通过idtcpclient控件判断是否连接的,连接的才发送啊
      

  4.   

    那要是网断了怎么办?主要就是这个问题,现在就是网线断开后idtcpclient端报错
      

  5.   

    在客户端把错误处理一下就行了吧,好像是OnError事件
      

  6.   

    把你的idtcpclient读语句改成这样:
       try
         str:=idTCPClient1.ReadLn();  
         ........
       except
         Exit;
       end;改了之后调试时(即用Delphi上的运行时)还会有错,直接执行编译的exe就不再提示出错了.
      

  7.   

    我很好的解决了这个问题,我用的ServerSocket/ClientSocket,当ServerSocket服务端断开后,ClientSocket端提示服务器断开,并自动监测尝试重新连接。给你段我的代码你参考吧:
    //当断开与服务器端的连接时发生
    procedure TfrmSmallScreen.ClientSocketDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
        tbSend.Enabled := False;
        tbDisconnected.Enabled := False;
        StatusBar.Panels[0].Text := '已经断开与与服务器的连接!等待连接到服务器...';    if ISCLOSE then //服务端主动关闭连接
          close;
       if (not ISCLOSE) and ISSocketConnect then //连接成功后的异常断开 
       begin
         Timer1.Enabled:=True;     
         ISSocketConnect:=False;
       end;
    end;//当与服务器端的连接发生错误时
    procedure TfrmSmallScreen.ClientSocketError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    begin
       //StatusBar.Panels[0].Text := '与服务器端的连接发生错误';
        ErrorCode := 0;
        myConnected;
    end;procedure TfrmSmallScreen.Timer1Timer(Sender: TObject);
    begin
      myConnected;
    end;procedure TfrmSmallScreen.myConnected;
    begin
      ClientSocket.Socket.Close ;
      ClientSocket.Open ; //打开套接字连接
      Application.ProcessMessages;
    end;
      

  8.   

    直接在ClientSocketError事件将ErrorCode := 0;
    即可,其它的处理随你了.我就是这样处理的,没有遇到任何问题.