public class Slave implements Runnable {
public ServerSocket slaveSocket;
public Slave(ServerSocket sk) {socket = sk;}
@Override
public void run() {
Socket client = slaveSocket.accept(); // slave will wait to serve a client
// more code...
Socket clientPart2 = slaveSocket.accept();
// more code...
}
}
public class Server {
public static void main(String[] args) {
// for example only, incomplete code
ServerSocket serverSocket = new ServerSocket(0); // a client connect to 8088
Slave slave = new Slave(serverSocket);
new Thread(slave).start(); // slave serve the current client, the server wait for new client
// send new slave's port to client ...
}
}
Итак, у меня есть сервер, который обслуживает несколько клиентов одновременно. Каждый раз, когда клиент подключается, сервер создает нового ведомого, отправляет IP / порт этого ведомого клиенту, а затем клиент будет работать с ведомым.
Однако, если клиент получит адрес ведомого, то ничего не делать (или выйти) ( Edit: это означает, что клиент и сервер подключены, но клиент ничего не делает, например, если пользователь идет на обед) slaveSocket.accept()
заставляет этот подчиненный поток работать вечно, что расточительно
Я хочу, чтобы подчиненная нить вышла через 30 секунд ожидания slaveSocket.accept()
. Поскольку slaveSocket.accept()
блокирует, я не могу сделать это изнутри void run()
.
Как правильно и чисто решить эту проблему? Спасибо.
Редактировать 1: ServerSocket передается ведомому, потому что клиент может иметь несколько процессов, которые будут подключаться к этому ведомому. Так что он не просто выполняет одну функцию.