с помощью сокетов, что является наилучшей практикой для сигнализации об окончании связи? - PullRequest
0 голосов
/ 21 февраля 2012

Я пишу клиент-серверное приложение с использованием сокетов на C ++.

Протокол связи по существу:

  1. Клиент подключается к серверу.
  2. Клиент "отправляет" команду ASCII на сервер.
  3. Сервер выполняет команду удаленно, получает результаты и отправляет результаты обратно клиенту.

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

Является ли наилучшим способом closesocket (), или он должен отправить сообщение, которое указывает клиенту, что больше нет результатов, и клиент может решить, закрывать ли сокет или нет?Недостаток закрытия сокета состоит в том, что клиенту нужно будет установить новое соединение, если он хочет выполнить другую команду, но недостатком отправки сообщения обратно с сервера является то, что клиент должен сканировать каждый recv, чтобы определить, есть ли результаты.готово.

Какая лучшая практика?

1 Ответ

3 голосов
/ 21 февраля 2012

Я бы выбрал слегка боковой подход:

  • Клиент отправляет команду на сервер
  • Размер отправки ответа сервером, а затем реальный ответ
  • Клиент может выдатьновая команда / закрыть соединение

Таким образом, клиент знает, сколько нужно прочитать, и может решить, закрывать ли соединение или нет.

...