用try...except来处理
不过在容易出错的地方都要处理
应该就可以了
不能让delphi给你的程序提示出错,因为它是英文的,还有经常用什么就决定地址出错的,太吓人了!呵呵

解决方案 »

  1.   

    我写的第三个例子怎么也不能用try...except
    try
    DM.ClientSocket1.Open;
    except
      On E : ESocketError do
      begin
        ShowMessage('Can''t Connect!');
      end;
    end;
    消息框死活不出来。Why?
    DM是一个数据模块。
      

  2.   

    try
    DM.ClientSocket1.Open;
    except
     // On E : ESocketError do
     // begin
        ShowMessage('Can''t Connect!');
     //end ;
    end ;
    试一下
      

  3.   

    楼上的方法确实可以使ShowMessage出来,但不能分清更具体的错误,有没有更好的办法
      

  4.   

    !!!
    Open opens the socket connection in a listening mode, but does not complete the connection to a client socket.
      

  5.   

    why not use "ClientSocket.Active:=true"?
      

  6.   

    //SysErrorMessage在2000下都是返回的中文,不知98是不是,你看看吧。procedure TForm1.MySocketProc(ErrorCode: Integer);
    begin
      ShowMessage(SysErrorMessage(ErrorCode));
    end;procedure TForm1.ButtonOnClick(Sender: TObject);
    begin
      //SetErrorProc是ScktComp.pas单元中,是说如果Socket错了,可以由用户来处理错误,
      //而且提供ErrorCode参数,如果没有VCL一般是raise a Socket Error with ErrorCode
      ScktComp.SetErrorProc(MySocketProc);
      DM.ClientSocket1.Open;
      ScktComp.SetErrorProc(nil);
    end;
      

  7.   

    to zhuxuanxuan():
    ClientSocket.Open和ClientSocket.Active:=true有什么区别呢?
      

  8.   

    'Open opens the socket connection in a listening mode, but does not complete the connection to a client socket.'这是对TServerSocket来说的吧,TClientSocket.Open应该是可以立即连接到Server的。
      

  9.   

    TClientSocket.ClientType有两种类型:ctNonBlocking(Default)和ctBlocking
    当为default时,Open时程序马上返回,不管连没连上Server,所以
    try
      Open;
    except
      ...
    end;
    在Default方式可以取不了它的raise.
    用ctBlocking可以,它是等待连接成功或是raise才返回。
      

  10.   

    OnError事件又可以用了!我只是把ClientType设为ctBlocking后又改回ctNonBlocking就可以了。·%%……%¥#·%!!
      

  11.   

    WSAGetLastError然后根据获得的错误号进行判断,一些winsocket的书都有详细的错误对照表