Какой будет хороший подход к созданию этого приложения? - PullRequest
0 голосов
/ 15 ноября 2010

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

Каким будет самый простой подход?

Ответы [ 4 ]

2 голосов
/ 15 ноября 2010

Это на самом деле не выполнимо автоматически. В сети Windows вы можете попробовать эквивалент "net view", который дает вам список клиентов. В целом, однако, нет никакой гарантии, что компьютеры будут обнаружимы. Существуют подходы такого рода работы, такие как выполнение nslookup для всех адресов в локальной сети, но это грубая сила, и если компьютер не регистрирует свое имя в DNS, это тоже не будет работать.

Предполагая, что вы решили проблему с определением IP-адреса, с которым вы хотите общаться, все, что вам нужно, - это сокет (UDP для пакетов или TCP для потоков), а затем вы можете начать общаться (или отправлять сообщения из приложения в приложение). Любое введение в TCP / IP будет иметь примеры для этого.

В C # это очень легко сделать с помощью классов Socket или UDPClient

1 голос
/ 15 ноября 2010

Частично это зависит от платформы и доступных услуг. Я собираюсь предположить, что окна из-за тега C # (хотя я знаю, что это может быть на Linux или даже iphone из-за моно).

Если правильные порты открыты и службы запущены, вы можете использовать NET SEND для передачи сообщения всем машинам в данном домене. ( Пример ).

Если net send не работает для вас, вам понадобится как минимум клиентское приложение, способное объявить о своем присутствии любому желающему прослушать. Так работала Windows для рабочих групп в прошлые дни. Вы захотите использовать какой-либо тип UDP-вещания.

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

К сожалению, из-за множества сетевых ограничений это не всегда работает хорошо. Если с задержкой все в порядке, то вы можете просто каждый клиент периодически проверять на сервере, чтобы увидеть, есть ли новые сообщения (вроде электронной почты).

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

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

1 голос
/ 15 ноября 2010

Список всех компьютеров доступной сети:

public void Main()
{
    DirectoryEntry root = new DirectoryEntry("WinNT:");
    DirectoryServices.DirectoryEntries parent = default(DirectoryServices.DirectoryEntries);
    parent = root.Children;
    DirectoryEntries d = parent;
    foreach (DirectoryEntry complist in parent) {
        foreach (DirectoryEntry c in complist.Children) {
            if ((c.Name != "Schema")) {
                Console.WriteLine(c.Name);
            }
        }
    }
}

В есть пример приложения * codeproject , позволяющий отправлять всплывающие сообщения Windows по сети .

NetSend Plus

0 голосов
/ 15 ноября 2010

Возможно, есть более простой способ, но я бы превратил что-то подобное в приложение клиент / сервер.Проблема, однако, заключается в том, что вам нужно будет установить клиент на каждом компьютере в сети.

Но реализация состояла бы в том, чтобы каждый клиент регистрировался на сервере, тогда приложение на стороне сервера было бы просто посредником, который обрабатывал бы доставку сообщений между каждым приложением.

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

...