我正在向TCP服务器发送一条消息,并在运行它之后,java.net.BindException: Address already in use当我尝试再次运行它时出现错误.我认为套接字是未绑定的; 但是,我无法在文档中找到任何具体的说法.如何释放端口,我不是在这里正确结束交易?这是我的客户:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
它是未绑定的,但是如果另一端需要在发送方端缓冲一些数据,则等待超时.如果您想重新使用端口而不等待这种情况发生,您可以使用
socket.setReuseAddress(true);
Run Code Online (Sandbox Code Playgroud)
必须在尝试绑定之前设置此项.
简而言之,这就是TCP的实现方式,而不是Java的一个特性.
| 归档时间: |
|
| 查看次数: |
2954 次 |
| 最近记录: |