我在Java SIP客户端中遇到了一些关于套接字的问题。当我绑定到地址和端口时,如果出现错误,我必须尝试重新连接,通常是在我停止并重新启动进程之后。这样做的问题是,端口被绑定,我被迫增加本地端口。
在绑定到目标端口之前,如何删除到该端口的绑定?
如果这是不可能的,那么我如何在进程结束之前捕获它,以便我可以定位套接字绑定并手动关闭它?
@Jason - Jason,但在这种情况下,我正在编写客户端,并且无法访问服务器,我所指的端口在客户端上,并且是本地端口。有没有办法在尝试连接之前刷新端口绑定?如果没有,有没有办法捕获进程中断,就像在perl中一样,有办法捕获一个'die‘信号并做一些后处理,Java有这个功能吗?如果是这样,我可以在套接字连接上调用close()
发布于 2010-05-28 05:14:52
通过在线阅读本教程,我找到了一种捕获Java信号的方法-- http://www.ibm.com/developerworks/java/library/i-signalhandling/
这样可以捕获管芯信号并关闭连接。
发布于 2010-05-14 03:29:31
在我的经验中,10次中有9次,这类问题的答案是“查找SO_LINGER”。
如果您在客户机上拔下插头(字面上),服务器乐观地希望它会回来收集您已经在该套接字上发送的数据。因此,它会保留该数据和端口,直到缓冲区清空。
通常,在服务器上,由于您刚刚发现的那种DOS攻击(有意或意外),您会怀着极端的偏见杀死这些缓冲区。
发布于 2010-05-14 18:43:25
不要摆弄SO_LINGER,它只会增加不安全感。真正的问题是,为什么要绑定到本地端口?
https://stackoverflow.com/questions/2829621
复制相似问题