ServerSocket の停止方法
処理中の ServerSocket を停止する場合は、halt() 内にて自分自身で Socket を生成して要求を送り、
ServerSocket に accept() させる。その後の流れは Thread の停止
と同じ。
ソース記述例
public class ServerSocketTest extends Thread {
private int port_;
private boolean halt_;
public ServerSocketTest(int port) {
port_ = port;
start();
}
public void run() {
ServerSocket server = null;
try {
server = new ServerSocket(port_);
while (!halt_) {
Socket socket = server.accept();
// TODO 処理
}
System.out.println("ServerSocketTest is halted.");
} catch (InterruptedException e) {
System.out.println("ServerSocketTest is halted.");
} catch (Throwable t) {
t.printStackTrace();
System.out.println("ServerSocketTest is dead.");
} finally {
if (server != null) {
try {
server.close();
} catch (IOException e) {
}
}
}
}
public void halt() {
halt_ = true;
interrupt();
try {
Socket socket = new Socket("127.0.0.1", port_);
try {
OutputStream stream = socket.getOutputStream();
String shutdown = "shudown command";
for (int i = 0; i < shutdown.length(); i++) {
stream.write(shutdown.charAt(i));
}
stream.flush();
stream.close();
} catch (Exception e) {
}
socket.close();
} catch (IOException e) {
e.printStackTrace(System.out);
System.exit(1);
}
}
}
|