Когда использовать разные порты для клиент-серверного приложения? - PullRequest
2 голосов
/ 25 июля 2011

Когда мне обычно понадобятся разные порты для связи клиент-сервер? (Этот вопрос для C # и общего программирования сокетов).

Я реализовал и использую простое клиент-серверное приложение C #. В основном:

  • сервер слушает клиента
  • принято / подключено
  • клиентский поток порождения сервера -
  • сервер ждет, пока клиент заговорит
  • разговор с клиентом
  • ответ сервера
  • разговор с клиентом
  • сервер отвечает и т. Д.

если клиент перестает говорить, сервер блокируется в режиме NetworkStream.Read() навсегда в этом порожденном потоке, если только клиентская сторона не отключится.

Я сейчас думаю о ситуации, когда обе стороны хранят молчание, пока какое-либо событие не произойдет с обеих сторон, тогда только клиент или сервер будут передавать данные. Таким образом, оба должны быть как-то одновременно в режиме NetworkStream.Read, а также иметь возможность отправлять друг другу одновременно (если событие происходит с обеих сторон одновременно).

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

Спасибо.

1 Ответ

1 голос
/ 25 июля 2011

Отличный вопрос. Я написал более одного приложения с этой архитектурой. Когда вам нужно двунаправленное соединение, вам нужно два соединения (конечно, в двух разных портах) между клиентом и сервером:

  1. Соединение, при котором запросы передаются от клиента к серверу
  2. Соединение, при котором запросы передаются от сервера клиенту

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

...