gpt4 book ai didi

java - 为什么 socket.close() 不释放绑定(bind)端口?

转载 作者:搜寻专家 更新时间:2023-11-01 01:10:28 26 4
gpt4 key购买 nike

我正在向 TCP 服务器发送一条消息,在运行它之后,当我尝试再次运行它时出现 java.net.BindException: Address already in use 错误。我认为套接字是未绑定(bind)的;不过,我在文档中找不到任何具体说明它的作用。我如何释放端口,我不是在这里正确结束交易吗?这是我的客户:

public class TcpPingClient {
public static void main(String[] args) throws Exception {
Socket tcpSocket = new Socket();
tcpSocket.bind(new InetSocketAddress("192.168.1.2", 45030));
tcpSocket.connect(new InetSocketAddress("192.168.1.2", 1211));
DataOutputStream out = new DataOutputStream(tcpSocket.getOutputStream());
out.writeBytes("oh hey\n");
tcpSocket.close();
}
}

最佳答案

它是未绑定(bind)的,但等待超时以防另一端需要在发送端缓冲一些数据。如果您想在不等待这种情况发生的情况下重新使用端口,您可以使用

socket.setReuseAddress(true);

这必须在您尝试绑定(bind)之前设置。

简而言之,这就是TCP的实现方式,而不是Java的特性。

关于java - 为什么 socket.close() 不释放绑定(bind)端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18849754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com