次のような 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