- 締切済み
accept している ServerSocket
ある ServerSocket が accept しているとして、その accept から強制的に抜け出させるにはどうすれば良いのでしょうか? その様なコマンドは存在するのでしょうか? 接続を作るという方法は無しにして・・・・。別のスレッドから中断させる様な・・・・。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ssr-y6
- ベストアンサー率71% (5/7)
以下が、サーバを別スレッドで実行させ、それをメインスレッドで監視/制御する方法の一例です。 このサンプルは、接続中にIEなどで"http://localhost:12354/"にアクセスすれば接続され、 10秒たっても接続がない場合は、強制終了させます。 import java.net.*; class serverthread extends Thread { private ServerSocket Server; private Socket Client; private boolean ConnectFlag; public serverthread() throws Exception { super(); Server = new ServerSocket(12345); ConnectFlag = false; }; public void ConnectStart() { start(); }; public boolean CheckConnected() { return(ConnectFlag); }; public void BreakConnecting() { try { Server.close(); } catch(Exception ex) { System.out.println("<close>" + ex.toString()); }; }; public String GetConnectionData() { if (!ConnectFlag) return("NotConnected"); return(Client.getInetAddress().toString() + " : " + Integer.toString(Client.getPort())); }; public void run() { try { Client = Server.accept(); ConnectFlag = true; } catch(Exception ex) { System.out.println("<run>" + ex.toString()); }; }; } public class serverto { private static final int TimeoutTime = 10; public static void main(String args[]) { int Int1; try { serverthread ServerThread = new serverthread(); ServerThread.ConnectStart(); for (Int1 = 0; Int1 < TimeoutTime; Int1 ++) { if (ServerThread.CheckConnected()) break; System.out.println("Connecting.." + Int1); try { Thread.sleep(1000); } catch(Exception e) {}; }; if (Int1 == TimeoutTime) ServerThread.BreakConnecting(); System.out.println(ServerThread.GetConnectionData()); ServerThread.join(); } catch(Exception ex) { System.out.println("<main>" + ex.toString()); }; }; }
- a-kuma
- ベストアンサー率50% (1122/2211)
ServerSocket を close() すれば java.io.InterruptedIOException が 飛んでこないでしょうか? ServerSocket を、クラスのメンバーにして、そのクラスのスレッドで、 accept() をするスレッドと、中断させるスレッドからは、close() を するような感じで。 # java は、経験がほとんど無いので自信はあまり無いですが...
お礼
ありがとうございます。早速、試してみます。