に私は(ちょうど何かをしようとして)次のように特定のポートをリッスンするようにしようとしています小さなコード書かれていた:のSocketException:ソケットが(受け入れで閉鎖)のServerSocket
public class Test {
public static class MyThread extends Thread {
ServerSocket ss = null;
public MyThread(int port){
try {
ss = new ServerSocket(port);
} catch (IOException e) {
System.out.println("Exception in assigning port : " + port);
e.printStackTrace();
}
}
public void stopListening(){
try {
ss.close();
} catch (IOException e) {
System.out.println("Exception in closing socket : " + ss.getLocalPort());
e.printStackTrace();
}
}
public void run(){
try {
ss.accept();
} catch (IOException e) {
System.out.println("Exception in listening on port : " + ss.getLocalPort());
e.printStackTrace();
}
}
}
public static void main(String[] args) {
List<MyThread> threadList = new LinkedList<>();
for (int i = 50000; i < 50005; i++) {
MyThread thread = new MyThread(i);
threadList.add(thread);
thread.start();
}
try {
Thread.sleep(5000);
} catch (InterruptedException e2) {
e2.printStackTrace();
}
for (MyThread myThread : threadList) {
myThread.stopListening();
}
}
}
をしかし、私は起動することができませんでもシングルスレッド、すべてのss.accept()
のために、私は得続ける:
例外をポートで待機中:
私はfolloを取得しますそれぞれの場合の翼例外:
java.net.SocketException: socket closed
at java.net.DualStackPlainSocketImpl.accept0(Native Method)
at java.net.DualStackPlainSocketImpl.socketAccept(Unknown Source)
at java.net.AbstractPlainSocketImpl.accept(Unknown Source)
at java.net.PlainSocketImpl.accept(Unknown Source)
at java.net.ServerSocket.implAccept(Unknown Source)
at java.net.ServerSocket.accept(Unknown Source)
at com.harman.hlacssmdw.Test$MyThread.run(Test.java:40)
私がテーマのどれもが占有されていない、netstatコマンド-anpを使用して50000から50000までのポートをチェックします。
私は何が間違っているのか理解できません、助けてください!
プログラムを開始して5秒後に例外が発生しますか?あなたがstopListening()を呼び出した頃については正しいでしょうか? –
はい私は約5秒後にこれを取得しますが、行のss.accept() ' –
でソケットを閉じるのと同じように 'accept()'を呼び出すため例外がスローされます。正確に何が起こると思いますか?そしてなぜあなたは 'accept()'を呼び出して戻り値を無視していますか?そしてここで「聞くことができない」ことはありません。あなたが尋ねていることが不明で、あなたのコードがやっていると思われることが、まだやっていないことです。 – EJP