Ошибка передачи на сокете

1

Я пишу общую программу сокета-клиента Client-Server, где клиент отправляет команды на Сервер, который выполняет его и отправляет результат клиенту.

Однако, если во время выполнения команды есть ошибка , я хочу иметь возможность информировать клиента об ошибке. Я знаю, что могу отправить строку "ERROR" или, возможно, что-то вроде -1 и т.д., Но они также могут быть частью вывода команды. Есть ли лучший способ отправить сообщение об ошибке или исключение через сокет. Мой сервер находится в Java и клиент находится в Python

  • 0
    Возможно, на стороне сервера есть способ заставить клиентский сокет генерировать исключение?
  • 0
    Создал вопрос на основе моего комментария: stackoverflow.com/questions/23605248/…
Теги:
sockets

2 ответа

0

Вы уже (обязательно) устанавливаете какой-то формат или протокол, в котором строки отправляются туда и обратно - либо вы каким-то образом завершаете каждую строку, либо отправляете ее длину сначала, либо тому подобное. (TCP по сути является потоком, поэтому без такого протокола не будет возможности, который получатель мог бы знать, когда команда или результат завершены! -)

Итак, независимо от того, какой подход вы используете для разграничения строк, просто сделайте так, чтобы результаты, отправленные с сервера на клиент, были двумя строками каждый раз: один из них является описанием ошибки (пустой, если нет ошибки), другой - результаты команд (пустой, если нет результатов). Это будет тривиально как для отправки, так и для получения/разбора и минимальных накладных расходов (отправка пустой строки должна быть такой же простой, как отправка только терминатора или длины 0).

0

Обычно при выполнении клиент-серверной связи вам необходимо установить какой-то протокол. Один очень простой протокол - отправить строку "КОМАНДА", прежде чем отправлять какие-либо команды и строку "ОШИБКА", прежде чем отправлять какие-либо ошибки. Это удваивает количество строк, которые вы должны отправить, но дает большую гибкость.

Существует еще несколько более сложных протоколов, уже разработанных. Вместо того, чтобы отправлять строки, вы могли бы построить объект Request, который затем сериализуете и отправляете клиенту. Затем клиент может восстановить объект Request и выполнить запрос, выполнял ли он ошибку или выполнял команду.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню