Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 为什么DatagramChannel关闭后仍然绑定地址_Java_Udp - Fatal编程技术网

Java 为什么DatagramChannel关闭后仍然绑定地址

Java 为什么DatagramChannel关闭后仍然绑定地址,java,udp,Java,Udp,可能重复: 尝试使用DatagramHanned很好,但在关闭地址后仍然绑定地址,函数完成执行,如下例所示 为什么要打印此代码: 电话号码:2 java.net.BindException:地址已在使用中:bind public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() {

可能重复:

尝试使用DatagramHanned很好,但在关闭地址后仍然绑定地址,函数完成执行,如下例所示

为什么要打印此代码:

电话号码:2

java.net.BindException:地址已在使用中:bind

 public static void main(String[] args) {

            java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            recever(1);
            recever(2);
        }
    });
}

    static void recever(int c) {
     try {        
        DatagramChannel chdata = DatagramChannel.open();

            int uport = 3111;
            int bufsize = 10;
         chdata.configureBlocking(false);
         Selector selector = Selector.open();

         chdata.bind(new InetSocketAddress(uport));
         ByteBuffer  bytbuf = ByteBuffer.allocate(bufsize);      
            chdata.register(selector, SelectionKey.OP_READ);

     int th = 0;
     int sn;

    while (true) {

        if (selector.select(1000) == 0){
                     System.out.println("\nTimeout");
            break;
        }

        Set readyKeys = selector.selectedKeys();
        Iterator iterator = readyKeys.iterator();
        while (iterator.hasNext()) {
           iterator.next();
            iterator.remove();

               bytbuf.clear();
               chdata.receive(bytbuf);
               th++;
               bytbuf.flip();
       //   dealwithincomingbuffer(bytbuf);
          }
       }    
      //  chdata.bind(null);
        chdata.close();

    } catch (IOException ex) {
        System.out.println("Call num: "+c+" \n  "+ex);
    }
  }
}

您没有在finally块中关闭套接字,也没有关闭选择器。因此,在某些情况下,套接字根本没有关闭。

谢谢,我正在尝试调整我的原始代码,因此将向您反馈是否与最终关闭它的需要相同。如果您是指我正在使用的datagramchannel,我已关闭,是的,不是最终关闭。最后我必须关闭它,现在它可以工作了。非常感谢。