Java:如何清除套接字绑定

Java:如何清除套接字绑定,java,port,Java,Port,我的Java SIP客户端中的套接字有一些问题。当我绑定到地址和端口时,如果出现问题,我必须尝试重新连接,通常是在我停止并重新启动进程之后。问题是端口被绑定,我被迫增加本地端口 在绑定到目标端口之前,如何删除该端口的绑定 如果这是不可能的,那么如何在进程结束之前捕获进程,以便找到套接字绑定并手动关闭它 @Jason-Jason,但在本例中,我正在编写客户机,无法访问服务器,我所指的端口位于客户机上,并且是本地端口。在尝试连接之前,是否有方法刷新端口绑定?如果没有,有没有一种方法可以捕获进程中断,

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

在绑定到目标端口之前,如何删除该端口的绑定

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


@Jason-Jason,但在本例中,我正在编写客户机,无法访问服务器,我所指的端口位于客户机上,并且是本地端口。在尝试连接之前,是否有方法刷新端口绑定?如果没有,有没有一种方法可以捕获进程中断,就像在perl中有一种方法可以捕获“die”信号并进行一些后处理一样,Java有这种方法吗?如果是这样的话,我可以在套接字连接上调用close(),根据我的经验,10次中有9次调用close(),那么这类问题的答案是“查找sou_LINGER”

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


通常在服务器上,由于您刚刚发现的某种DOS攻击(故意或意外),您希望以极大的偏见杀死这些缓冲区。

根据我的经验,这类问题的答案是“查找以便保留”

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


通常在服务器上,由于您刚刚发现的某种DOS攻击(故意或意外),您希望以极大的偏见杀死这些缓冲区。

不要胡闹,这只会增加不安全感。真正的问题是,为什么要绑定到本地端口

不要摆弄这么久,这只会增加不安全感。真正的问题是,为什么要绑定到本地端口

好的-我通过在线阅读本教程找到了捕获Java信号的方法-


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

好的-我通过在线阅读本教程找到了捕获Java信号的方法-


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

非常有趣。我见过一些关于java套接字的东西,其中两个java服务器似乎绑定到同一个端口!不知道它是否与.Jason相关,但在本例中,我正在编写客户端,无法访问服务器,我所指的端口位于客户端上,并且是本地端口。在尝试连接之前,是否有方法刷新端口绑定?如果没有,有没有一种方法可以捕获进程中断,就像在perl中有一种方法可以捕获“die”信号并进行一些后处理一样,Java有这种方法吗?如果是这样,我可以在套接字连接上调用close(),它应该仍然可以工作,是的。一般来说,当您是建立连接的人时,发起端口并不重要(您是否在防火墙上打孔?),但一旦创建了套接字,TCP-IP堆栈就不关心是谁发起了请求。您的内核仍然会保留您认为已完成的连接的数据包,除非您告诉它不要这样做。什么仍然可以工作?你的回答把我弄糊涂了。我的问题是如何清除客户端导致的本地端口绑定?当客户端下次连接时(如重新启动进程时),我希望能够清除端口绑定以确保没有冲突。如何做到这一点?回到我最初的建议:只需尝试setSoLinger(false,0),看看这是否能解决您的问题。长版本:开放式套接字就是开放式套接字。当另一端的人离开时,会出现清理代码,但这些代码并没有达到过去20年中编写软件的人所希望的效果(我第一次遇到这个问题是在1992年,在Usenet上找到了很多建议)。默认情况下,它处于启用状态。如果你想重复使用一个地址,你必须改变默认值。非常有趣。我见过一些关于java套接字的东西,其中两个java服务器似乎绑定到同一个端口!不知道它是否与.Jason相关,但在本例中,我正在编写客户端,无法访问服务器,我所指的端口位于客户端上,并且是本地端口。在尝试连接之前,是否有方法刷新端口绑定?如果没有,有没有一种方法可以捕获进程中断,就像在perl中有一种方法可以捕获“die”信号并进行一些后处理一样,Java有这种方法吗?如果是这样,我可以在套接字连接上调用close(),它应该仍然可以工作,是的。一般来说,当您是建立连接的人时,发起端口并不重要(您是否在防火墙上打孔?),但一旦创建了套接字,TCP-IP堆栈就不关心是谁发起了请求。您的内核仍然会保留您认为已完成的连接的数据包,除非您告诉它不要这样做。什么仍然可以工作?你的回答把我弄糊涂了。我的问题是如何清除客户端导致的本地端口绑定?当客户端下次连接时(如重新启动进程时),我希望能够清除端口绑定以确保没有冲突。如何做到这一点?回到我最初的建议:只需尝试setSoLinger(false,0),看看这是否能解决您的问题。长版本:开放式套接字就是开放式套接字。当另一端的人离开时,会出现清理代码,但这些代码并没有达到过去20年中编写软件的人所希望的效果(我第一次遇到这个问题是在1992年,在Usenet上找到了很多建议)。默认情况下,它处于启用状态。如果你想重用一个地址,你必须改变默认值