Java: TCP-сокет, может ли сервер сначала выполнить первый запрос?

#java #sockets #server #request #client

#java #сокеты #сервер #запрос #клиент

Вопрос:

Следуя этой схеме, мне удалось подключить клиент к его серверу и отлично взаимодействовать :

Схема TCP

Вопрос в том, можно ли позволить серверу сначала выполнить запрос первым? Если да, как я могу настроить клиента на ожидание вызова сервера?

Я сделал это (на стороне клиента) :

 Socket serverSocket = new Socket(Network.serverInetAddress, Network.SERVICE_PORT);

while (!Thread.currentThread().isInterrupted()) {
    ObjectInputStream objectInputStream = new ObjectInputStream(new BufferedInputStream(serverSocket.getInputStream()));
    MessageContent messageContent = (MessageContent) objectInputStream.readObject();

    Network.processMessage(messageContent);
}

serverSocket.close();
 

Но клиент не получил сообщение сервера, хотя я не видел никакой ошибки в журналах моего клиента или сервера.

Как я могу решить эту проблему и «транслировать» сообщение с сервера всем подключенным клиентам? Спасибо! 🙂

Комментарии:

1. Запрос? Вы хотите передачу данных или соединение? Если передача — просто сделайте socket.read(...) на стороне клиента — вам не нужно ServerSocket на клиенте. Если вы хотите, чтобы сервер инициировал соединение, тогда это уже не сервер, а клиент 🙂

2. Спасибо @VictorSorokin, я не нашел метод чтения () сокета. Пожалуйста, каково точное имя?

3. socket.getInputStream().read(...)

4. Спасибо @VictorSorokin :), ты мужчина.

Ответ №1:

Да, это возможно. Вы должны указать клиент, который должен ожидать сообщения сервера (вы можете сделать это с помощью команды чтения в сокете, потому что это блокирующая команда). На сервере единственное, что вам нужно сделать, это получить данные после того, как клиентское соединение примет.