我用ServerSocket和ClientSocket分别做了一个服务器站的程序,一个客户端的
但有一种情况就是:服务器的ServerSocket.avtive:=false;  如果这时再用客户连服务器就会出错了.有没有方法,测试现在服务器是否可以连接呢?如果关闭的话就不连接,直接提示客户!
还有就是,有时服务器地址错,也会出错的。所以我想先PING一下比较好吧?具体怎么做?

解决方案 »

  1.   

    捕捉异常
     try
        正常访问服务器语句
     except
        访问失败后的处理
        如:showmessage('访问失败');
     end;
    很好用,没有英文提示呀!!!
      

  2.   

    有啊有啊。如果在服务器.active:=false情况有啊。
    如果我客户的服务器IP指向错的话,就会出现
    as.. socket error 10049
    服务器关了的话,是
    as.. socket error 10061
      

  3.   

    如果简单的查,用cmd,netstat命令
      

  4.   

    这个问题我也问过,最后我是勉强解决了,用多线程!  TSendMessage=class(TThread)
      private
        MsgHost:string;
        TheStream: TWinSocketStream;
        buffer: string;
        CSocket: TClientSocket;
        s:tsocket;
        error:integer;
        server:tsockaddrin;
      protected
        procedure Execute;override;
        procedure MsgError(Sender: TObject;Socket: TCustomWinSocket;
         ErrorEvent: TErrorEvent;var ErrorCode: Integer);
      public
        constructor Create(const RemoteHost:string);
      end;constructor TSendMessage.Create(const RemoteHost:string);
    begin
      MsgHost:=RemoteHost;
      inherited create(false);
    end;procedure TSendMessage.Execute;
    begin
      FreeOnTerminate:=True;
      if MsgHost<>'' then
      begin
        server.sin_addr.S_addr:=inet_addr(pchar(MsgHost));
        s:=socket(AF_INET, SOCK_STREAM, 0);
        server.sin_port:=htons(8113);
        server.sin_family:=AF_INET;
        error:=connect(s,server,sizeof(server));
        if error=0 then
        begin
          try
          CSocket:=TClientSocket.Create(nil);
          CSocket.Host:=MsgHost;
          CSocket.port:=8113;
          Csocket.OnError:=MsgError;
          //CSocket.OnWrite:=Form1.ClientSocket1.OnWrite;
          CSocket.ClientType:=ctBlocking;
          CSocket.Active:=true;
          except
          exit;
          end;
          try
          TheStream := TWinSocketStream.Create(Csocket.Socket, 60000);
          TheStream.Write(amsg,length(amsg)+1);
          finally
          CSocket.Free;
          TheStream.Free;
          end;
        end;
      end;
    end;procedure TSendMessage.MsgError(Sender: TObject;Socket: TCustomWinSocket;
    ErrorEvent: TErrorEvent;var ErrorCode: Integer);
    begin
      if ErrorEvent=eeConnect then
        Socket.Close
      else if ErrorEvent=eeSend then
        Socket.Close;
      ErrorCode:=0;
    end;写的不好,见笑了
      

  5.   

    在 OnError中處理, 最後 ErrorCode:=0;就可
      

  6.   

    TO aiirii(ari) 
    在什么时让ErrorCode:=0;??
      

  7.   

    在CLIENTSOCKET的ONERROR事件中直接写这句
      

  8.   

    TO  aiirii(ari)    
    在什么时让ErrorCode:=0;??
      

  9.   

    aiirii(ari) 说::
    ----------------------------------------------------------------
    原贴内容:
    不是這個意思的, 而是在控件自己還有一個 onError的事件, 在事件中處理!
    OK结了
    ----------------------------------------------------------------