请问各位朋友,我用Socket s= new Socket(ip,host)方法建立连接。我想在它连接的过程中中断它。改如何操作呢?s.close()方法不行,因为在构造方法执行完之前,s是个空的引用。

解决方案 »

  1.   

    Socket s= new Socket(ip,host);
    只是构造了一个Socket对象,当然绝对不是一个空的。
    s.connect();当调用这个方法的时候才真正去连接。如果没有连接成功,调用s.close()方法会出现异常。
      

  2.   

    那即便是使用connext()方法去连接,这个方法也会阻塞进程。该怎样中断这个方法呢?因为是用分线程去进行连接操作的。调用线程的interrupt()方法没有作用。该怎么做呢?
      

  3.   

    LZ是说根本不想连接是吗?我觉得你可以写一个自己的socket类,并继承自socket类。然后重载连接方法。
      

  4.   

    socket带参的是自动连接的
    需要手动调用 connect的是无参的LZ,你无法中断他,中断是线程在阻塞等待下 为了让其放弃阻塞状态 或者为了给线程一个退出的标志使用的,socket的连接如何阻塞?
      

  5.   

    Socket s= new Socket(ip,host);
      这个是一直阻塞的
    Socket 想终止线程 需要释放资源  interrupt 方法无效 ,因为是不可中断的阻塞要么使用NIO 可以 阻塞
      

  6.   

    完全搞不懂楼主,你在执行connect()方法的时候既然要中断他,你又何必要去调用connect()方法让它去连接呢?吃多了吧?
      

  7.   


    如果链接上 就会阻塞    connect 是为了可以设置断开时间  setSoTimeOut
      

  8.   


    超时可以在socket上设置,
    看了你的回复,的确IO是操作系统级的阻塞,学习了看了7楼的回复,我也在想,LZ是什么目的?
      

  9.   

    不对吧,应该是在连接中会阻塞吧。连接成功之后还会阻塞吗?注: Socket() 
              通过系统默认类型的 SocketImpl 创建未连接套接字 

      Socket(InetAddress address, int port) 
              创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
      Socket(InetAddress host, int port, boolean stream) 
              已过时。 Use DatagramSocket instead for UDP transport. 
      Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 
              创建一个套接字并将其连接到指定远程地址上的指定远程端口。 
      Socket(Proxy proxy) 
              创建一个未连接的套接字并指定代理类型(如果有),该代理不管其他设置如何都应被使用。 
    protected  Socket(SocketImpl impl) 
              使用用户指定的 SocketImpl 创建一个未连接 Socket。 

      Socket(String host, int port) 
              创建一个流套接字并将其连接到指定主机上的指定端口号。 
      Socket(String host, int port, boolean stream) 
              已过时。 使用 DatagramSocket 取代 UDP 传输。 
      Socket(String host, int port, InetAddress localAddr, int localPort) 
              创建一个套接字并将其连接到指定远程主机上的指定远程端口。 当中标红的则是不会自动去连接的。
    未标红的,可以看一下相应的构造函数,内部有调用connect()这个方法。
    换句话说:如果不调用connect()这个套接字则不会去连接。
      

  10.   

    我的意思是,线程卡在连接服务器的过程中,我想让他中断。比如连接过程中,用户点击取消。我已经找到了解决方法,就是设一个标志。用户点击取消,就改变标志。而socket连接成功或失败后,按照标志来进行下一步操作。多谢你的回复。我没吃多。
      

  11.   

    我的意思是,线程卡在连接服务器的过程中,我想让他中断。比如连接过程中,用户点击取消。我已经找到了解决方法,就是设一个标志。用户点击取消,就改变标志。而socket连接成功或失败后,按照标志来进行下一步操作。多谢你的回复。我没吃多,只是比较菜鸟而已。