地址错,控件发现不了。用SetErrorProc,它是ScktComp单元的东东。procedure ConnectErrorProc(ErrorCode: Integer); 
begin
  ShowMessage(Format('连接错,信息是:%s, 错误代码是:%d', [SysErrorMessage(Errorcode), ErrorCode]);
end;procedure TForm1.Button1OnClick(Sender: TObject);
begin
  SetErrorProc(ConnectErrorProc);
  //不用try了.
  clientSocket1.Active := True;
end;

解决方案 »

  1.   

    我记得以前讨论过这个问题. 用TClientSocket 时,使用HOSTNAME 未找到的异常抓不住...
    使用Address倒是没有这问题..可能是一个BUG..
    可以找一下以前的贴子..或者是换换其它的组件.试试.
      

  2.   

    to copy_paste(落泊的木石三) :
               你的程序好像不起作用,设定了之后,并不处理异常
    to halfdream(哈欠):          的确,用了address好像就没有事了,难道真的是bug,可是用address的话,我就没有办法让用户输入 机器名了,而只能输入ip地址了,谢谢各位帮忙,还请继续
      

  3.   

    ErrorCode赋值0。则忽略这个异常。
      

  4.   

    ErrorCode赋值0好像也没有用的?why?
    -->可是用address的话,我就没有办法让用户输入 机器名了,而只能输入ip地址
    你可以先通过host得到得到IP...
    uses winsock;
    function nametoip(name:string):string;
    var
       WSAData:  TWSAData;
       HostEnt:  PHostEnt;
    begin
       result:='''';
       WSAStartup(2,  WSAData);
       HostEnt:=gethostbyname(PChar(name));
       if  HostEnt<>nil  then
       begin
           with  HostEnt^  do
             result:=  Format('%d.%d.%d.%d',  [Byte(h_addr^[0]),  Byte(h_addr^[1]),  Byte(h_addr^[2]),  Byte(h_addr^[3])]);
        end;
           WSACleanup;
    end;
      

  5.   

    你的ClientType = ctNonBlocking,它消息过来的,如果是ctBlocking,就没有错了,
    ctNonBlocking的上面的代码就不行了。ctNonBlocking的机制因为全是不是同步的,它只能靠消息来进行,错误来了,它会通知OnError事件,所以只能用ClientSocket.OnError,先把错误信息保存,再将ErrorCode := 0