Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Список всех ip-адресов локальной сети в vb .net

1.8K
27 ноября 2008 года
NextTime
217 / / 19.12.2007
Имеется локальная сеть с динамическими ip. На одном из компьютеров сети располагается сервер, написанный на Net.Sockets.Socket
Необходимо найти сервер с другого компьютера и подключится к нему, учитывая, что ip сервера может меняться. Как это сделать. Есть 2 проблемы:
1. Как узнать все ip адреса сети?
2. Как сделать попытку подключения?
Просто socket.Connect? Что он вернет? Исключение или nothing?
Порт сервера постоянный... Пусть будет 1350...
Помогите пожалуйста
5
27 ноября 2008 года
hardcase
4.5K / / 09.08.2005
Сервер TCP или UDP ?
1.8K
28 ноября 2008 года
NextTime
217 / / 19.12.2007
Цитата: hardcase
Сервер TCP или UDP ?



TCP конечно))

1.8K
29 ноября 2008 года
NextTime
217 / / 19.12.2007
Цитата: hardcase
Сервер TCP или UDP ?



Я понял почему вы это спросили....
Можно ведь создать еще по udp сокету у клиента и у сервера, применить широковещание и серверы ответят клиенту, что мы здесь...
Дошло это после прочтения темы нашего форума:
РАЗНОЕ>Студентам>Чат для локальной сети

Особенно меня заинтересовали следующие посты:

Цитата: pacific_7
Вах! Ты не знаешь просто, как работает обычный чат. А чат работает очень просто, и TCP тебе тут не надо совершенно. Тут надо UDP. Отправлять широковещательные пакеты на всю подсеть. Каждый экземпляр проги, это тебе и сервер, и клиент. Алгоритм получения адреса, на который надо слать пакеты, что бы их получала вся подсеть прост:
1. Определяем текущий IP и маску твоей подсети.
2. По полученным данным определяем широковещательный адрес для данной подсети. Сделать это можно так:
 
Код:
max_addr = ~subnet_mask;//ВЫЧИСЛЯЕМ МАКСИМАЛЬНЫЙ АДРЕС В ПОДСЕТИ
                        //ИНВЕРТИРУЯ МАСКУ
subnet_boradcast = subnet_ip | max_addr;//ВЫЧИСЛЯЕМ ШИРОКОВЕЩАТЕЛЬНЫЙ
            //АДРЕС ПРИ ПОМОЩИ ЛОГИЧЕСКОГО "ИЛИ"

Отправляем пакеты на него. Будет получать вся подсеть. Т.е. например, если у тебя адрес в сети 192.168.1.15 при маске 24 бита (т.е. 255.255.255.0), то широковещательный адрес получится 192.168.1.255 и всё, что будет отправлено на него будет получено всеми хостами подсети 192.168.1.0 т.е. 192.168.1.1 - 192.168.1.254
Для лучшего усвоения книжки, и вообще понимания работы сети советую скачать windump - аналог *nix-ового tcpdump'а. Правда глюковат слегка ;). Ну и nmap тоже не помешает. Обе эти проги для полноценной работы в windows требуют комплект библиотек winpcap, ссылка на который там присутствует.



Цитата: pacific_7
Цитата:Originally posted by orel
Вот, кстати, нашел в Делфе такую вещь:
компонент IdUDPServer метод Broadcast - посылает данные на всю сеть. Вроде как он шлет данные как обычно, но на адрес 255.255.255.255 Сработает ли такой финт?


Попробуй, должен сработать - чаты в основном так и работают. Но все равно это будет действовать только в пределах одной подсети, а не всей сети в целом, т.к. подобные пакеты убиваются маршрутизаторами, когда попадают на них. А между подсетями стоят маршрутизаторы. Если слать направленные broadcast-пакеты, например 192.168.0.255 (при маске подсети 24 бита), то такие пакеты будут переправлены из одной подстети в другую. Т.е. можно расширить область действия твоего чата хоть в инет



Я не совсем тут все понял, тем более что тут на делфи, а я пишу на ВБ .Нет...
я не понял про:
1.

Цитата: pacific_7
1. Определяем текущий IP и маску твоей подсети.
2. По полученным данным определяем широковещательный адрес для данной подсети. Сделать это можно так:
 
Код:
max_addr = ~subnet_mask;//ВЫЧИСЛЯЕМ МАКСИМАЛЬНЫЙ АДРЕС В ПОДСЕТИ
                        //ИНВЕРТИРУЯ МАСКУ
subnet_boradcast = subnet_ip | max_addr;//ВЫЧИСЛЯЕМ ШИРОКОВЕЩАТЕЛЬНЫЙ
            //АДРЕС ПРИ ПОМОЩИ ЛОГИЧЕСКОГО "ИЛИ"


Как реализвать это на .Net? и как это понять, почему так и не иначе?

2.

Цитата:
Цитата:Originally posted by orel
Вот, кстати, нашел в Делфе такую вещь:
компонент IdUDPServer метод Broadcast - посылает данные на всю сеть. Вроде как он шлет данные как обычно, но на адрес 255.255.255.255 Сработает ли такой финт?



У нас тоже есть этот Broadcast, но как его реализовать я не знаю(не получается). Я не хочу тупо отправлять на 255.255.255.255, поскольку понял, что это может обрушиться на первом же маршутизаторе.
Я пытаюсь сделать так:

Код:
Imports System.Net.Sockets
Imports System.Net
Public Class Form1
    Dim _serversocket As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
    Dim buffer(10) As Byte

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        _serversocket.EnableBroadcast = True
        _serversocket.Send(buffer, buffer.Length, SocketFlags.Broadcast)
    End Sub
End Class


пытался всяко менять, но он ругается на _serversocket.Send(buffer, buffer.Length, SocketFlags.Broadcast), говорит: "Предпринятая операция не поддерживается для выбранного типа объекта".

Облазил MSDN и весь инет, не могу решить это...
Помогите пожалуйста

P.S. for hardcase, желательно без UDPClient.... Очень желательно
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог