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

时间:2011-10-20 07:15:08

标签: java android sockets exception

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

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

        dc = new DatagramSocket(inetAddr);
        dc.setReuseAddress(true);  
问题是,它还没有到达第二行。在第一行本身我得到了exp BindException: Address already in use

任何人都可以帮我解决这个问题。

有没有办法释放这个端口?

谢谢&问候,
SSuman185

3 个答案:

答案 0 :(得分:12)

DatagramSocket(inetAddr)绑定到端口。在绑定之前需要setReuseAddress(true)

要执行此操作...请使用以下内容:

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

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

答案 1 :(得分:6)

使用MulticastSocket。构造它没有参数。这隐式调用setReuseAddress(true)。然后调用bind()。

目前你调用setReuseAddress()的时间太晚,无法做任何好事。

答案 2 :(得分:1)

这就是我的工作方式:

0