Чтобы создать lan messenger в C#, мне нужно определить хост-компьютеры в Интернете, очевидно, используя одно и то же программное обеспечение для почтовых ящиков. Я попытался найти отправную точку, чтобы сделать это, но напрасно. Мне нужно знать, как начать работу.Обнаружение хостов, подключенных к LAN
ответ
Можете ли вы использовать Windows Connection Foundation? Если это так, вы можете использовать WCF для реализации протокола WS-Discovery. Вот brief howto.
Возможно, ваше приложение прослушивает предопределенный порт, и когда кто-то подключается к этому порту, отсылайте какое-то подтверждение, например имя приложения и IP.
Поэтому, когда новый клиент приходит в сеть, он отправляет широковещательную рассылку UDP-пакетов на IP-адрес. Другие клиенты будут прослушивать эти «объявления» в соответствующем порту и отправлять отправителю собственный IP-адрес (через какой-либо другой порт). Итак, с начальным отправителем будут связаны все работающие клиенты в локальной сети с их IP-адресами. Другие клиенты также могут записывать IP-адрес отправителя «объявления» - это позволит им также обновлять список других клиентов в сети.
Чтобы сохранить список в актуальном состоянии, вы могли бы, чтобы все клиенты транслировали свое существование в сети с полуслучайными интервалами (например, каждую минуту + ранд (10) секунд).
Все вышесказанное предполагает, что вы говорите о клиентах в одной сети. Если вы делаете это в Интернете, вам понадобится центральная точка, которая будет отслеживать ips зарегистрированных клиентов.
Есть два способа сделать это в прошлом: все клиенты подключаются к предопределенному хосту (просто, но требует некоторой конфигурации клиента) и имеют хост (или клиент), транслирующий свое существование через «трансляцию» '(например, 10.0.255.255) (жесткие, брандмауэры/NAT могут сделать жизнь болезненной, клиенты не нуждаются в настройке).
Но, да - если WCF реализует протокол обнаружения, пойдите с этим. Если он делает то, что вы хотите, он, вероятно, лучше, чем все, что вы (или большинство людей, если на то пошло) могли написать.
В зависимости от того, если вы планируете полагаться на централизованном сервере или нет, у вас есть варианты:
1) Нет Сервер: Когда клиент приходит в Интернете, он транслирует свою идентичность, прося другими клиентами, чтобы отправить их.
2) Централизованный сервер: подключается новый клиент, он регистрируется на сервере и загружает список клиентов. Затем каждый клиент уведомляется (либо посредством опроса, либо дуплексного контракта при использовании WCF, либо через базовое соединение сокета) нового клиента.
Первая версия будет основана на разъемах UDP. Обратите внимание, что это не работает из локальной сети, поскольку я считаю, что эти пакеты не будут проходить через маршрутизаторы. Это также, вероятно, плохой дизайн, потому что большое количество клиентов просто загрузит сеть с помощью пакетов. Но эй, этого может быть достаточно для тебя.
Также у WCF есть поддержка одноранговых узлов, это может быть интересно для вас. Here - это статья об этом.
могли бы вы предоставить мне любой образец кода, показывает, как будет работать топология без сервера? – Avik
Я думаю, что можно выполнить ping трансляцию ip и получить ответ от всех. Или что-то типа того. Можно начать с этого, а затем проверить, прослушиваются ли клиенты на каком-то порту или что-то в этом роде.
Альтернатива заключается в том, чтобы клиенты сообщали серверу, что «мы все еще здесь!» так часто.
Возможно, вам понравится использовать ZeroConf aka Bonjour, Rendevous или иногда Avahi. Метод
Используйте этот GetComputers() я использовал в моей LAN Messenger
using System.Diagnostics;
public static string[] GetComputers()
{
//Process that retrieves the net view >> list of computers on the network
Process proc = new Process();
proc.StartInfo.FileName = "net.exe";
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.Arguments = "view";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
//Reads the output of the net view.
StreamReader sr = new StreamReader(proc.StandardOutput.BaseStream);
string line = "";
List<string> names = new List<string>();
while ((line = sr.ReadLine()) != null)
{
if (line.StartsWith(@"\\"))
names.Add(line.Substring(2).Split(' ')[0].TrimEnd());
}
sr.Close();
proc.WaitForExit();
//Array that contains computer names
string[] computerNames = new string[names.Capacity];
int i = 1;
//Adds computers names to the list view
foreach (string name in names)
{
computerNames[i] = name;
i++;
}
return computerNames;
}
- 1. обнаружение количества отправителей, подключенных к chromecast
- 2. Список всех хостов в сети LAN
- 3. Как получить список хостов, подключенных к серверу mysql
- 4. Обнаружение Интернета V. local lan connection
- 5. Обнаружение систем, подключенных к WiFi-маршрутизатору в android
- 6. Мониторинг клиентов, подключенных к сети
- 7. Пример программы rmi с участием 2 машин, подключенных через LAN
- 8. Iptables - DMZ к LAN
- 9. Обнаружение устройств, подключенных через Ethernet-кабели?
- 10. Доступ к файлу хостов
- 11. Можно ли получить имена хостов компьютеров, подключенных к базе данных MS SQL?
- 12. Как я могу захватить MAC-адрес точек доступа и хостов, подключенных к нему?
- 13. Подключение Vagrant VM к LAN
- 14. Обнаружение сбоев в работе ОС Bluetooth/LAN WLAN
- 15. Обнаружение всех подключенных мониторов с использованием Windows API
- 16. Обнаружение BLOB с использованием алгоритма маркировки подключенных компонентов
- 17. Обнаружение активной сети - это LAN или Wifi в Mac OS
- 18. Доступ к phpmyadmin over lan с использованием маска
- 19. Не удается подключиться к SSAS, используя LAN
- 20. Защитить доступ к ПК в lan
- 21. подключение к базе данных mysql на lan
- 22. Derby Database Доступ к локальной сети LAN
- 23. Доступ к общим ресурсам через LAN
- 24. Доступ к ODBC DSN на LAN
- 25. Доступ к сайту Magento на lan
- 26. Не удается подключиться к WAMP через LAN
- 27. Не удается подключиться к RabbitMQ через LAN
- 28. Обнаружение беспроводных устройств, подключенных к Raspberry Pi в Python на Linux
- 29. Обнаружение всех устройств, подключенных к моему Wi-Fi маршрутизатору, с помощью Android-программирования
- 30. Доступ к месту размещения IIS на других компьютерах через lan
проклятый, бить меня к нему :) –