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

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

1 голос
/ 20 февраля 2010

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

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

Мой сервер на Java, а клиент на Python

Ответы [ 2 ]

0 голосов
/ 20 февраля 2010

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

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

0 голосов
/ 20 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...