2014-09-25 1 views
2

Я ищу, чтобы написать программу, которая будет подключаться ко многим компьютерам с одного компьютера. Похоже на «Командный центр», где вы можете удаленно контролировать удаленную систему на одном ПК.Можно добавить несколько компонентов ClientSocket в форму?

Мой план состоит в том, чтобы иметь несколько клиентских сокетов на форме. Они будут подключаться к отдельным ПК удаленно. Таким образом, они могут запрашивать у них информацию для отображения в окне. Удаленным ПК будут хосты. Это возможно?

+0

Какой мониторинг? Наблюдение? Производительность системы? Дата/время? Вес вашего «мониторинга» определит ваше требование к масштабируемости. –

+0

Согласитесь с Джерри. Без ответа на эти вопросы слишком много неизвестных переменных. – Ampere

ответ

3

Прямой ответ на ваш вопрос: Да, вы можете это сделать.

Длинный ответ: Да, вы можете это сделать, но уверены ли вы, что ваш дизайн правильный? Вы уверены, что хотите создать параллельные соединения, по одному для каждого клиента? Наверное, нет! Если да, то вы, вероятно, захотите запустить их в отдельных потоках.

Если вы хотите время от времени отправлять какие-либо команды (и вы не выполняете какой-либо постоянный мониторинг видео), почему бы вам просто не использовать одно соединение и «переключиться» между клиентами?

Я не могу рассказать вам больше о дизайне, потому что из вашего вопроса не ясно, что вы хотите построить (что именно вы «контролируете»).

ОЧЕНЬ ВАЖНО!

Два важных уведомления принять во внимание, прежде чем разрабатывать приложение (как relevants только если удаленные компьютеры не в локальной сети (при подключении к ним через Интернет)):

  1. Если удаленные компьютеры работая как серверы, у вас будет лотов проблем для объяснения ваших клиентов (если они подключены (и, вероятно, они) к Интернету через маршрутизатор), как настроить маршрутизатор и программный брандмауэр. Например, если удаленный компьютер прослушивает команды от вас, на порту 1234 (например) брандмауэр в маршрутизаторе будет блокировать ПО DEFAULT любой попыткой подключения с «чужого» компьютера (от вас) к этому порту.
  2. Если ваши удаленные компьютеры работают как клиенты, как они будут знать IP-адрес мастера (ваш IP-адрес). У вас есть статический IP-адрес?
+0

3. Если у вас есть статический IP-адрес, у вас есть доменное имя, которое вы можете указать поддоменом для этого IP-адреса? (+1) Если в один прекрасный день вы решите переместить свой сервер на другой IP-адрес, у вас также будет кошмар. DNS может решить это. –

+2

Вопрос о подключении к хостам (серверам), ваш ответ о подключении к клиентам. Кроме того, открытие порта брандмауэра - это не «наука о ракетах», я бы не сказал, что это «много проблем». – mjn

+1

@ mjn-Когда речь идет о вашем собственном маршрутизаторе, это действительно не ракетостроение (хотя у меня было два маршрутизатора, которые отказались работать ... так много маршрутизаторов сегодня имеют багги-программное обеспечение). Но похоже, что ему нужно доставить приложение случайным пользователям. В этом случае решение «щелкнуть и запустить» невозможно из-за маршрутизаторов. Он должен будет объяснить пользователю, как настроить маршрутизатор. И каждый маршрутизатор имеет собственную процедуру настройки. – Ampere

2

На самом деле вам нужен один серверный сервер на модуле, работающем на вашем компьютере. , к которому все ваши удаленные ПК будут подключаться через их индивидуальный ClientSocket.

Вы можете сделать свой дизайн другим путем, поставив ClientSocket на модуль, работающий на вашем компьютере, и ServerSocket на модуле, запущенном на удаленной машине.

Но вы в конечном итоге создадите один ClientSocket для каждого ServerSocket, что, если вы увеличите количество удаленных серверов.

Теперь, если вы все еще хотите иметь несколько клиентских сокетов на своем компьютере, тогда как Altar сказал, что вам может понадобиться многопоточное приложение, в котором каждый поток отвечает за один ClientSocket.

0

Я бы порекомендовал Internet Direct (Indy), поскольку они хорошо работают в потоках, и вы можете указать тайм-аут подключения на одно соединение, чтобы ваше приложение мониторинга могло получить «отрицательный» результат теста быстрее, чем с помощью время ожидания подключения к ОС по умолчанию.

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