这段代码,在开始只要给ClientSocket1设置属性后就不能捕获错误信息,showmessage就不能显示出来                         ClientSocket1.Address:='192.168.0.142';
                       ClientSocket1.Port:=5000;
                       try                           ClientSocket1.Active:=true;
                         except
                         showmessage('连接失败');
                         end;只要不给ClientSocket1设置属性,就可以正常显示showmessage
                      //   ClientSocket1.Address:='192.168.0.142';
                    //   ClientSocket1.Port:=5000;
                       try                           ClientSocket1.Active:=true;
                         except
                         showmessage('连接失败');
                         end;但我必须要给ClientSocket1设置属性啊,请问怎么办?太怪异了

解决方案 »

  1.   

    你被自己弄糊涂了,呵呵
    ClientSocket1.Address:='192.168.0.142'; 
    ClientSocket1.Port:=5000; 
    try 
      ClientSocket1.Active:=true; 
    except 
      showmessage('连接失败'); 
    end; 
    你设置了属性,当执行到try的时候把ClientSocket1.Active:=true,这时ClientSocket1能够连接上,所以当然不会触发异常,而下面的代码则由于你没有设置连接属性,当ClientSocket1.Active:=true即要连接服务器端的时候触发异常了,当然会显示showmessage
      

  2.   

    //       ClientSocket1.Address:='192.168.0.142'; 
    //       ClientSocket1.Port:=5000;         try                                                                       ClientSocket1.Active:=true; 
       except 
         showmessage('连接失败'); 
       end; 上面的不要注释掉,还会有提示吗
      

  3.   

    我测试了一下,发现ClientSocket1的两个问题 :事先设置好host和port后。
    1、如果是ctBlocking模式,用
       try ClientSocket1.open 
           except showmessage('连接不上服务器');
       end;
       是可以显示自己写的异常信息的,但是只能发送数据,不能触发OnRead和OnError事件。如果需要跟服务器互相通信的,这个就满足不了。
    2、如果是ctNonBlocking模式,用
       try ClientSocket1.open 
           except showmessage('连接不上服务器');
       end。
       是触发不了showmessage的,虽然可以触发OnError事件中捕获的异常,还会跳出asynchronous socket error 10061的异常对话框,但能能触发OnRead事件。
    最后想了一个很变态的方法。用另外一个ClientSocket2设置成ctBlocking模式,专门用于判断能不能连接,而ClientSocket1设置成ClientSocket2用于真正跟服务器通信。虽然解决了原来的问题,但是很别扭,也有点麻烦,恳请高手提供更好方法。
      

  4.   

    ClientSocket2设置成ctNonBlocking用于真正跟服务器通信。写错了
      

  5.   

    我测试了一下,发现ClientSocket1的两个问题 :事先设置好host和port后。
    1、如果是ctBlocking模式,用
      try ClientSocket1.open  
      except showmessage('连接不上服务器');
      end;
      是可以显示自己写的异常信息的,但是只能发送数据,不能触发OnRead和OnError事件。如果需要跟服务器互相通信的,这个就满足不了。
    2、如果是ctNonBlocking模式,用
      try ClientSocket1.open  
      except showmessage('连接不上服务器');
      end。
      是触发不了showmessage的,虽然可以触发OnError事件中捕获的异常,还会跳出asynchronous socket error 10061的异常对话框,但能能触发OnRead事件。
    最后想了一个很变态的方法。用另外一个ClientSocket2设置成ctBlocking模式,专门用于判断能不能连接,而ClientSocket1设置成ctNonBlocking用于真正跟服务器通信。虽然解决了原来的问题,但是很别扭,也有点麻烦,恳请高手提供更好方法。
      

  6.   

    在 onerror 事件里判断错误类型,根据错误类型显示自己的错误提示,在把errorcode=0,取消socket的错误消息提示