Вы должны выполнить accept
в том же потоке, где происходит цикл while
, а затем, после получения нового принятого соединения, запустить новый поток:
while (true) {
Socket incoming = s.accept();
Runnable r = new ThreadedEchoHandler(incoming);
new Thread(r).start();
}
И изменить ThreadEchoHandler
чтобы получить Socket
извне:
class ThreadedEchoHandler implements Runnable {
final private Socket incoming;
private String nomeAccount = "";
ThreadedEchoHandler(Socket incoming) {
this.incoming = incoming;
}
public void run() {
// do stuff
}
}
Конечно, вы можете организовать его различными способами, например, ThreadedEchoHandler
может запустить поток из конструктора или даже сделать accept
тоже,но опять же, это должно произойти до запуска потока:
class ThreadedEchoHandler implements Runnable {
final private Socket incoming;
private String nomeAccount = "";
ThreadedEchoHandler(ServerSocket serv) throws IOException {
incoming = serv.accept();
new Thread(this).start();
}
public void run() {
// do stuff
}
}
тогда цикл может быть таким:
while (true) new ThreadedEchoHandler(s);