アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

接続を作るという方法は無しにして・・・・。別のスレッドから中断させる様な・・・・。

A 回答 (2件)

ServerSocket を close() すれば java.io.InterruptedIOException が


飛んでこないでしょうか?

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

# java は、経験がほとんど無いので自信はあまり無いですが...
    • good
    • 0
この回答へのお礼

ありがとうございます。早速、試してみます。

お礼日時:2001/06/08 00:42

 以下が、サーバを別スレッドで実行させ、それをメインスレッドで監視/制御する方法の一例です。


 このサンプルは、接続中に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()); };

};

}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!