Путаница в отношениях клиент-сервер

У меня есть 5 компьютеров, которые управляют разным оборудованием. Один из пяти является основным контроллером для остальных 4. Мне нужно отправлять команды с основного контроллера на 4 подчиненных контроллера по TCPIP. У меня очень ограниченный опыт программирования на Socket.

Что в моей системе будет клиентом, а что сервером? Мне кажется, что в конфигурации у меня может быть перекошена грань между сервером и клиентом. Обе стороны должны отправлять и получать команды, действительно ли существует разделение клиента и сервера или это просто соглашение? Могу ли я иметь обе конечные точки в качестве клиента и сервера одновременно, используя один и тот же сокет? По сути, могу ли я одновременно прослушивать и отправлять запросы?

Я ссылаюсь на пример кода на MSN.

Асинхронный сокет сервера

Асинхронный клиентский сокет


person Felix Castor    schedule 21.11.2015    source источник


Ответы (2)


Что касается соединений через сокеты, то, кто является клиентом, а кто сервером, зависит только от того, кто принимает соединения (сервер) и кто инициирует запрос на соединение (клиент).

Как только соединение установлено, трафик может идти в любом направлении (и клиент, и сервер могут отправлять и/или получать данные).

person 500 - Internal Server Error    schedule 21.11.2015

Ваш главный контроллер — Сервер. Когда он подключается к сети, он прослушивает ваши подчиненные, чтобы объявить, что они в сети. Они делают это, подключаясь к серверу в качестве клиентов. Сервер будет принимать соединения.

Если каждое ведомое устройство выполняет какую-то специальную функцию, то у вас должно быть сообщение, которое клиент может отправить на сервер, указывающее на эту функцию. Если для правильной работы системы требуются все ведомые устройства, вам нужно будет подождать, пока все ведомые устройства объявят о своих отдельных функциях.

Затем ваш сервер сможет отправлять сообщения отдельному клиенту или транслировать всем клиентам. Каждый клиент сможет отправлять сообщения только на сервер. Если необходима связь между клиентами, вы, вероятно, реализовали бы пересылку сообщений на сервере. Таким образом, вашим клиентам не нужно знать адреса других клиентов. Им нужно будет только знать свою функцию, которая будет использоваться для маршрутизации сообщений соответствующему Клиенту.

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

Если ваш протокол окажется более подходящим для одноранговой связи, а не клиент-сервер, вы можете рассмотреть возможность использования UDP вместо TCP.

person Lorek    schedule 21.11.2015