2016-12-17 7 views
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回)?任意の勧告は歓迎

答えて

0

あるあなたはserverSocket.accept();

を遮断される原因となり、別のスレッドからサーバーの近くを呼び出す必要がありますを見てみましょう:彼はすでにやっている正確に何であるInterrupt accept method and close the server

+0

を。 – EJP

+0

彼は質問しました。「ServerSocketを終了するのは正しい方法ですか?また、私はちょうど "はいです"と言うためにいくつかの引数を追加します^ _ ^ – Xephi

関連する問題