0
私はServerSocket
を使用するように勉強しており、accept()
のメソッドが動作している間にserverSocket
オブジェクトを閉じるときにエラーが発生します。次に、setSoTimeout()
メソッドで解決策を見つけました。しかし、例外を無視するのはベストプラクティスではないと私は思う。 だから、ここだ私の二つのクラス:ServerSocketを閉じる正しい方法
クラスサーバー:
public class Server {
public static final int PORT = 8777;
private ServerSocket serverSocket;
private boolean serverRuns;
Server() {
try {
serverSocket = new ServerSocket(PORT);
serverRuns = true;
(new Control(this)).start(); // Takes commands while working
while (serverRuns) {
try {
serverSocket.setSoTimeout(1000);
Socket clientSocket = serverSocket.accept();
}
catch (SocketTimeoutException e) {
// cap
}
}
} catch (IOException e) {
e.printStackTrace();
}
finally {
try {
serverSocket.close();
System.out.println("Server stopped");
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void stopServer() {
serverRuns = false;
}
public boolean isServerRuns() {
return serverRuns;
}
public static void main(String[] Args) {
Server s = new Server();
}
}
クラスコントロール:それはServerSocket
作業を終了する正しい方法は、(例外を無視してserverRuns
をチェック
public class Control extends Thread {
private Server activeServer;
private Control() {}
Control(Server activeServer) {
this.activeServer = activeServer;
}
@Override
public void run() {
Scanner keyboard = new Scanner(System.in);
while (activeServer.isServerRuns()) {
String key = keyboard.nextLine().toLowerCase();
switch (key) {
case "close":
activeServer.stopServer();
break;
}
}
}
}
です1秒に1回)?任意の勧告は歓迎
を。 – EJP
彼は質問しました。「ServerSocketを終了するのは正しい方法ですか?また、私はちょうど "はいです"と言うためにいくつかの引数を追加します^ _ ^ – Xephi