【发布时间】:2014-01-18 03:09:09
【问题描述】:
我有以下程序:
package testServer;
import java.io.IOException;
import java.net.*;
public class MainClass {
public static void main(String[] args) throws IOException {
ServerSocket socket = new ServerSocket (8073);
socket.close();
}
}
如您所见,我在程序结束时关闭了我的套接字。但是,当我重新启动程序时,我得到了 例外:
Exception in thread "main" java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.socketBind(PlainSocketImpl.java:521)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:414)
at java.net.ServerSocket.bind(ServerSocket.java:326)
at java.net.ServerSocket.<init>(ServerSocket.java:192)
at java.net.ServerSocket.<init>(ServerSocket.java:104)
at testServer.MainClass.main(MainClass.java:10)
为什么会这样?我认为在调用close() 之后,端口可以被重用。
我通过netstat检查了这个套接字没有在其他任何地方使用。
【问题讨论】:
-
您确定该端口没有在其他地方使用吗?在您再次尝试运行之前确定该程序已关闭?
-
@Makoto 是的,我通过 netstat 进行了检查
-
套接字永远绑定?或者如果您等待某个时间端口被释放?也许与操作系统有关。
-
@molokoV 套接字我永远丢失了