-PR-
締切済み

accept している ServerSocket

  • すぐに回答を!
  • 質問No.86483
  • 閲覧数2647
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 77% (38/49)

ある ServerSocket が accept しているとして、その accept から強制的に抜け出させるにはどうすれば良いのでしょうか?
その様なコマンドは存在するのでしょうか?

接続を作るという方法は無しにして・・・・。別のスレッドから中断させる様な・・・・。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

ServerSocket を close() すれば java.io.InterruptedIOException が
飛んでこないでしょうか?

ServerSocket を、クラスのメンバーにして、そのクラスのスレッドで、
accept() をするスレッドと、中断させるスレッドからは、close() を
するような感じで。

# java は、経験がほとんど無いので自信はあまり無いですが...
お礼コメント
t_n

お礼率 77% (38/49)

ありがとうございます。早速、試してみます。
投稿日時 - 2001-06-08 00:42:13


  • 回答No.2
レベル7

ベストアンサー率 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()); };

};

}
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ