私はこのコードを使用してサーバのスレッドを持っている:ServerSocket.accept()でブロックされたスレッドのブロックを解除するには?
public void run() {
try {
ServerSocket server;
EneaLog.printLog("Server is running.");
server = new ServerSocket(this.portnumber);
while (true) {
new EneaServerConnection(server.accept(), this.project,stopped).start();
if (stopped) {
EneaLog.printLog("Server safe-shutdown completed.");
EneaLog.printLog("Hi!");
server.close();
return;
}
}
} catch (IOException ex) {
Logger.getLogger(EneaServer.class.getName()).log(Level.SEVERE, null, ex);
project.getExceptionHandler().handler(ex);
}
}
と、このようなシャットダウン方法:
public void shutdown() {
EneaLog.printLog("Server shutdown NOW!");
stopped = true;
}
私はシャットダウンがserver.accept(上で待機しているスレッドのブロックを解除することができますしたい)そう私はサーバーのシャットダウン前に接続を待機する必要があります。
シャットダウン()でserver.close()を実行できません。登録されているクライアントに、そのサーバがダウンしていることを通知する必要があるためです。
アイデア?
mmm良い答え..たぶん私は問題へのアプローチを変更します。クライアント側のサーバーシャットダウンをtry-catchで管理します。 –