Хорошо, люди. В основном спасибо aoi222 и Kely French, но всем остальным. Я нашел решение, которое:
1.- Очевидно, вам нужно создать поток, который обслуживает исключительно клиента. Первый раз клиент подключается к серверу к общему порту. Это создает поток, слушающий определенный порт, и сообщает клиенту, какой новый порт будет прослушивать новый поток. Затем клиент меняет свой порт и создает новый сокет, чтобы начать разговор с клиентом.
2.- Сервер, работающий как отдельный поток, должен продолжать слушать цикл, как указано в aoi222 навсегда. Принять только из цикла для эксклюзивного потока, который был назначен клиенту. Пожалуйста, смотрите код ниже и извините за имя переменных, так как они немного сбивают с толку:
fromClient = server.accept();
clientInput = new ObjectInputStream (fromClient.getInputStream());
serverOutput = new ObjectOutputStream (fromClient.getOutputStream());
Hello received;
while ( (received = (Hello)clientInput.readObject()) != null ) {
received.setHello("pepito grillo");
serverOutput.writeObject(received);
}
3.- Пожалуйста, обратите внимание, что сервер основного потока ДОЛЖЕН иметь server.accept в цикле для того, чтобы принять соединение новых клиентов
for (;;) {
newClient = mainServer.accept();
new exclusiveThread ().start ()
}
"exclusiveThread" - это поток, который реализует код в 2.
Отредактировано:
Я забыл сказать, что клиент должен отправить серверу сообщение о завершении, чтобы определить, что разговор завершен, и остановить lopp. В противном случае это приведет к исключению java.io.EOFException.
Большое спасибо, ребята, за вашу помощь.