2015-06-17 2 views
0

Я пытаюсь написать серверную программу для C, которая сможет обрабатывать плохо написанную клиентскую программу. Клиент отправляет на сервер кучу команд, а затем закрывает сокет. После того, как сервер выполнит каждую команду, он должен отправить либо 0, либо 1 клиенту в зависимости от того, была ли команда неудачной или нет.Возможно ли считывание из клиентского сокета после отсоединения клиента?

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

Есть ли способ справиться с этим? Как в, чтобы писать и читать все команды?

+1

Я не понимаю, что вы пытаетесь сделать. Клиент получает ответ от сервера, а затем отключается. Как сервер должен получать больше команд от клиента после отсоединения клиента? –

+0

Я не понял. Клиент отправляет x команды на сервер за меньшее время, чем сервер, чтобы иметь дело с 1 командой (команды обрабатываются по 1 за раз). Если я не пытаюсь написать клиенту, даже после того, как клиент закроет сокет, я все равно могу прочитать оставшиеся команды x-1. Если я пишу клиенту, я больше не могу читать команды. –

ответ

0

В этом случае вам необходимо знать, будет ли клиент ждать ответа каждой команды перед отправкой другой. В типичном соединении клиент-сервер клиент начинает связь. Поскольку ваш клиент отправляет кучу команд, есть 2 возможности:

  • В конце операции ваш возврат сокета будет ОК или NOK.
  • Для каждого сообщения, которое клиент отправляет, ваше возвращение будет ОК или NOK.

Кроме того, я предлагаю вам отправить любую информацию о трассировке, чтобы мы могли оценить, какое решение лучше подойдет вашему делу.

+0

Есть ли способ проверить, нормально ли сокет или NOK? –

+0

Если вы подключены к своему сверстнику, то сокет в порядке. Im испуганный я не получил это exacly .. Сокет является соединением прикладного уровня, если хост продолжает слушать на конкретном порту, тогда клиент сможет отправлять indefinetly – rfermi

+0

Есть ли способ узнать, отсоединяется ли клиент раньше Я пытаюсь написать? У меня такое чувство, что я пытаюсь писать и устранять проблемы. –

Смежные вопросы