如何在java代码中为数据报套接字设置重用地址选项?

如何在java代码中为数据报套接字设置重用地址选项?,java,android,sockets,exception,Java,Android,Sockets,Exception,在我的应用程序中,将有一个线程始终在运行,并将发送或侦听某个端口 此应用程序在后台运行。有时,在创建套接字时,我发现以前由同一线程使用的端口在套接字的close()上没有被释放。所以我试着这样做 dc = new DatagramSocket(inetAddr); dc.setReuseAddress(true); 问题是,它还没有到达第二条线。在第一行中,我得到了expectionBindException:Address已在使用中 有谁能帮我处理这种情况

在我的应用程序中,将有一个线程始终在运行,并将发送或侦听某个端口

此应用程序在后台运行。有时,在创建套接字时,我发现以前由同一线程使用的端口在套接字的close()上没有被释放。所以我试着这样做

        dc = new DatagramSocket(inetAddr);
        dc.setReuseAddress(true);  
问题是,它还没有到达第二条线。在第一行中,我得到了expection
BindException:Address已在使用中

有谁能帮我处理这种情况吗

有没有办法释放端口

谢谢和问候,

SSuman185

使用
多播套接字
。构造它时不带任何参数。隐式调用setReuseAddress(true)的。然后调用bind()

现在调用setReuseAddress()太晚了,它无法发挥任何作用。

DatagramSocket(inetAddr)
绑定到端口。在绑定之前,您需要
设置reuseaddress(true)

要做到这一点。。。使用以下命令:

dc = new DatagramSocket(null);
dc.setReuseAddress(true);
dc.bind(inetAddr);

此构造函数使端口保持未绑定状态。

这就是它对我的工作方式:

try {
      clientMulticastSocket = new MulticastSocket(null);
      clientMulticastSocket.setReuseAddress(true);
      clientMulticastSocket.bind(new InetSocketAddress(multicastHostAddress, multicastPort));
      clientMulticastSocket.joinGroup(multicastHostAddress);
    } catch (IOException e) {
      e.printStackTrace();
      return false;
    }

看看我编辑过的答案。谢谢,我试过了,但有疑问吗?我注意到,当我创建不带参数的DatagramSocket()时,它会绑定到某个空闲端口号。设置重用地址和绑定后,将绑定到新端口。老港口怎么了?@SSuman185正确,位置很好。您必须创建一个多播套接字。你可以像DatagramSocket一样使用它,DatagramSocket的默认构造函数在大约15年前被错误设计了。@Suman我已经解释过了。构造一个没有参数的多播套接字。你不明白其中的哪一部分?这里的inetAddr代表了什么?!!这帮了大忙!谢谢你,@poy!InetSocketAddress addr=新的InetSocketAddress(“localhost”,55562);