Создание строго ограниченного приложения для обнаружения серверов в c # - PullRequest
1 голос
/ 30 марта 2010

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

По сути, мне нужно создать приложение, которое может позаботиться о следующем:

Пользователь запускает приложение, которое отправляет широковещательную рассылку в подсеть и получает ответ всех серверов с указанием IP-адреса (и некоторой дополнительной информации). Затем пользователь может выбрать, к какому серверу он хочет подключиться.

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

  • Скорее всего, на серверах в сети будут также клиенты, что означает, что мы можем предположить, что приложение присутствует на всех машинах. На каждой машине должен быть запущен приемник, и каждая машина может запустить графический интерфейс для выбора сервера.
  • Мне разрешено добавить только одно исключение в брандмауэр - исключение, которое обрабатывает как рассылку, так и прием, отправку ответов и получение ответов.
  • Я должен добавить только одну службу Windows
  • на сервере, слушатель должен работать как служба Windows, поэтому пользователь не заметит этого. Также пользователь не заметит, что ответ отправляется обратно клиенту.
  • На клиентском компьютере пользователь может запустить приложение, которое уведомит приложение об отправке широковещательной рассылки и получит все ответы сервера, поэтому пользователь может выбрать один для подключения.
  • Кроме того, что из приложения, которое пользователь запускает для выбора сервера, вообще не должно быть взаимодействия с пользователем. Даже не всплывающее окно, запрашивающее пользователя разрешить трафик через брандмауэр - все должно быть автоматически
  • Он должен работать между Win XP, Win Vista и Win 7 и между ними.

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

У меня есть несколько идей - мне просто нужно выяснить, как это сделать:

  • Должен ли я сделать все в одном приложении, которое я добавлю в список исключений брандмауэра, чтобы он позаботился о трафике как на сервере, так и на клиентских машинах?
  • Должен ли я добавить пользовательское исключение в брандмауэр, разрешающее UDP-трафик на определенный порт, и затем иметь весь поток трафика через него?
  • Есть ли третий и лучший вариант для управления этим?
  • Служба работает на клиентских и серверных компьютерах. Но может ли он обо всем позаботиться обо мне - например, обрабатывать и отправлять / получать, и отвечать / отправлять? И есть ли способ извлечь информацию о серверах в сети из службы?

Я знаю, что это много, но я очень надеюсь, что вы сможете мне помочь.

дайте мне знать, если я не достаточно ясно, или если вам нужны дальнейшие объяснения.

Я пишу в C # .Net, и я могу использовать все, что я хочу, из .Net Framework. Как только у меня будет реализован этот функционал

Всего наилучшего

/ Саги

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Вид проблем одноранговой сети становится простым до такой степени тривиальным, если вы назначаете одну машину в качестве главного сервера. У него должно быть хорошо известное имя, к которому могут подключаться все подсерверы, чтобы они могли публиковать (и отзывать) свою доступность. Затем клиент может отправить запрос на тот же сервер и получить список известных серверов взамен.

Это также может решить проблему брандмауэра, главный сервер может прослушивать порт 80.

Просмотрите пространство имен System.Net.PeerToPeer для решения p2p, поддерживаемого платформой.

0 голосов
/ 30 марта 2010

Может быть, сервер и клиент UPnP могут быть решением вашей проблемы?

...