Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 插座关闭后,我的插座一直关闭。连接超时_Java_Sockets - Fatal编程技术网

Java 插座关闭后,我的插座一直关闭。连接超时

Java 插座关闭后,我的插座一直关闭。连接超时,java,sockets,Java,Sockets,这快把我逼疯了 我正在尝试实现TCP holepunching,作为其中的一部分,我有一个套接字尝试连续连接 出于某种原因,在第一次mobileSocket2.connect调用超时后,第二次出现套接字关闭异常。我不知道为什么。据我所知,连接超时不应该关闭套接字。那么为什么说套接字关闭了第二个循环呢 我在前面将套接字绑定到相同的本地IP地址和本地端口,但关闭该套接字 任何帮助都将不胜感激 Socket mobileSocket2 = new Socket(); try {

这快把我逼疯了

我正在尝试实现TCP holepunching,作为其中的一部分,我有一个套接字尝试连续连接

出于某种原因,在第一次mobileSocket2.connect调用超时后,第二次出现套接字关闭异常。我不知道为什么。据我所知,连接超时不应该关闭套接字。那么为什么说套接字关闭了第二个循环呢

我在前面将套接字绑定到相同的本地IP地址和本地端口,但关闭该套接字

任何帮助都将不胜感激

Socket mobileSocket2 = new Socket();

        try {

        System.out.println("105");

        mobileSocket2.setReuseAddress(true);
        System.out.println("109");

        mobileSocket2.setSoTimeout(50);

        mobileSocket2.bind(new InetSocketAddress(myIPAddress.getHostAddress(), myPort));
        System.out.println("bound");

        }
        catch (Exception e) {

            System.out.println("caught 104: " + e.toString());
        }




    while(true){

        Thread.sleep(5000);
        try{

                System.out.println("124");
                mobileSocket2.connect(new InetSocketAddress(mobileAddress.getHostAddress(), mobilePort));
                System.out.println("connection made: " + mobileSocket);


            }
            catch(Exception e){
                System.out.println("exception 2 caught " + e.toString());

            }

    }

捕获第一个异常时重新打开套接字,或者将超时设置为0,javadoc将其解释为“无限”。我没有看Socket和SocketImpl代码,但我很有信心,因为Socket是一个可关闭的,也是一个自动关闭的,所以实现是按照

public void connect(InetAddress address, int port) throws IOException {
   try {
      // connect to the other endpoint
   } catch(/*any relevant exception*/) {
      throw new IOException(/* ... */);
   } finally {
      this.close();
   }
}
您的代码无效

无法重新连接已连接的套接字。当连接成功时,需要添加break语句

当连接失败时,不能重用套接字。您必须关闭它并创建一个新的