Я пишу вам из-за новой проблемы, которую мне нужно решить, и теперь я слишком сильно ударяю головой о стену.Создание приложения с ограниченным доступом к серверу в C#
В принципе, мне нужно создать приложение, которое может позаботиться о следующем:
пользователь запускает приложение, которое отправляет широковещательный подсети, обеспечением и получает ответ от всех серверов там с их IP (и дополнительная информация). Затем пользователь может выбрать сервер, к которому он хочет подключиться.
Выполнение этой работы достаточно просто, с идентификацией подсети и широковещанием с UDP, а затем с другим серверным приложением, получающим его и отправляющим ответ. Проблема заключается с этими ограничениями, что мне нужно принять во внимание:
- Там, скорее всего, также будет клиентов на серверах в сети, а это означает, что мы можем предположить, что приложение присутствует на всех машинах. На каждом компьютере должен быть запущен слушатель, и каждый компьютер может запустить графический интерфейс для выбора сервера.
- Мне остается только добавить одно исключение из брандмауэра - исключение, которое обрабатывает как отправку трансляций, получение трансляций, отправка ответов и получение ответов.
- Я должен добавить только одну службу Windows
- на серверной машине, слушатель должен работать как служба Windows, поэтому пользователь этого не заметит. Пользователь также не замечает, что ответ отправляется обратно клиенту.
- На клиентской машине пользователь может запустить приложение, которое уведомит приложение о передаче широковещательной передачи и получит все ответы сервера, поэтому пользователь может выбрать один для подключения.
- Помимо приложения, которое пользователь запускает для выбора сервера, не должно быть никакого взаимодействия с пользователем. Даже не всплывающее окно с запросом пользователя, чтобы разрешить трафик корыта брандмауэр - все это должно быть автоматически
- Он должен работать и между Win XP, Win Vista и Win 7.
Я не знаю, если я слишком много налагаю на себя, но я действительно надеюсь, что смогу сделать приложение с этими требованиями.
У меня есть несколько идей, - мне просто нужно, чтобы выяснить, как это сделать:
- Должен ли я сделать все в одно приложение, что я могу добавить в список исключений брандмауэра, поэтому он будет заботиться о трафик как на сервере, так и на клиентских машинах?
- Должен ли я добавить настраиваемое исключение из брандмауэра, разрешая трафик UDP на конкретном порту, а затем весь поток трафика?
- Есть ли третий и лучший вариант для управления этим?
- Это нормально, чтобы служба работала как на клиентских, так и на серверных машинах. Но может ли он позаботиться обо всем для меня - как он обрабатывает передачу и получение трансляции, и ответ отправляет/получает? И есть ли способ извлечь информацию о серверах в сети из службы?
Я знаю, что это много, но я очень надеюсь, что вы сможете мне помочь.
сообщите мне, если я не был достаточно ясен или вам нужны дальнейшие объяснения.
Я кодирую в C# .Net, и я могу использовать все, что я хочу, из инфраструктуры .Net. Как только я эта функциональность реализована
Все лучшее
/Sagi
Я также рассмотрю это - спасибо за ваш ответ :) – Sagi1981
Собственно, протокол SSDP, используемый для обнаружения в UPnP, такой же, как поддерживается PNRP, реализованным в пространстве имен System.Net.PeerToPeer , так что это должно работать очень хорошо, и включение исключения UPnP в брандмауэр также должно работать для него. – Lucero
Если вы посмотрите на мой комментарий к другому ответу. Будет ли UPnP также требовать, чтобы PeerToPeer был включен, и существуют ли какие-либо риски безопасности? – Sagi1981