Java:如何清除套接字绑定

时间:2010-05-13 19:18:19

标签: java port

我的Java SIP客户端中的套接字存在一些问题。当我绑定到地址和端口时,如果出现问题,我必须尝试重新连接,通常是在我停止并重新启动进程之后。问题是端口被绑定,我被迫增加本地端口。

如何在绑定之前删除绑定到我定位的端口?

如果那是不可能的,那么如何在进程结束之前捕获进程以便我可以找到套接字绑定并手动关闭它?

@Jason - Jason,但在这种情况下,我正在编写客户端并且无法访问服务器,我所指的端口位于客户端并且是本地的。有没有办法在尝试连接之前刷新端口绑定?如果没有办法捕获进程中断,就像在perl中有一种方法来捕获'die'信号并进行一些后处理,Java是否有这个?如果是这样,我可以在套接字连接上调用close()

3 个答案:

答案 0 :(得分:3)

根据我的经验,10次中有9次,这类问题的答案是“查找SO_LINGER”。

如果您在客户端上拔插头(字面意思),服务器乐观地希望它会回来收集您已经在该套接字上发送的数据。因此它保留了该数据和端口,直到缓冲区清除。

通常在服务器上你想要以极端的偏见杀死这些缓冲区,因为你刚刚发现了DOS攻击(有意或无意)。

答案 1 :(得分:0)

不要使用SO_LINGER,它只会增加不安全感。真正的问题是你为什么要绑定到本地端口?

答案 2 :(得分:0)

好的 - 我通过在线阅读本教程找到了一种捕获Java信号的方法 - http://www.ibm.com/developerworks/java/library/i-signalhandling/

这样可以捕获芯片信号并关闭连接。