【发布时间】:2012-05-09 12:24:50
【问题描述】:
我在 linux 中使用服务器套接字,我需要在 time_wait TCP 状态到期之前将其关闭并重新打开。我在绑定之前设置了服务器套接字的重用地址选项,但它仍然抛出 BindException。 我也试过这个http://meteatamel.wordpress.com/2010/12/01/socket-reuseaddress-property-and-linux/,但还是不行。
要打开我使用的服务器套接字:
ServerSocket ss = new ServerSocket();
ss.setReuseAddress(true);
ss.bind(new InetSocketAddress(12345));
然后关闭:
ss.close();
在绑定调用时抛出“地址已在使用”BindException。
此代码生成异常:
for (int i = 0; i < 2; i++) {
new Thread(new Runnable() {
@Override
public void run() {
try {
final ServerSocket ss = new ServerSocket();
ss.setReuseAddress(true);
ss.bind(new InetSocketAddress(12345));
Socket s = ss.accept();
System.out.println((char) s.getInputStream().read());
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
Thread.sleep(500);
Socket s = new Socket("localhost", 12345);
s.getOutputStream().write('c');
}
【问题讨论】:
-
你能编辑你的问题并向我们展示你用来配置套接字的代码吗?
标签: java serversocket time-wait