我有一些类似于此的 java 代码:
private void startServer() throws IOException {
URLClassLoader classloader = null;
System.out.println("Opening server socket for listening on " + PORT_NUMBER);
try {
server = new ServerSocket(PORT_NUMBER);
server.setSoTimeout(10000);
connected = true;
System.out.println("Server is now listening on port " + PORT_NUMBER);
} catch (IOException e) {
System.err.println("Could not start server on port " + PORT_NUMBER);
e.printStackTrace();
connected = false;
}
while (connected) {
// Incoming request handler socket.
Socket socket = null;
try {
System.out.println("Waiting for client connection...");
// Block waiting for an incoming connection.
socket = server.accept();
if (socket == null) continue;
...等等等等。当我稍后调用 server.close() 时(如果我先调用 socket.close(),我不会得到任何不同的行为),我没有收到任何错误,但 netstat 显示端口仍在被监听。调用 ServerSocket.close() 是否足以释放该系统上的端口?
我正在为 Java 1.4.2 微版本运行时编程。还值得注意的是,我让这个方法在另一个线程中运行,并且我正在尝试从其父线程关闭套接字。
编辑这是来自 netstat 的行,尽管我可以向您保证它仍在被监听,因为如果我再次启动 Xlet,我会收到该端口号的异常。
tcp 0 0 *.2349 *.* LISTEN