Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407

Правильно пропинговать кучку IP

01.10.2011, 02:25. Показов 5354. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, есть ли более корректный способ пропинговать компы с последующим выводом соответствующей иконки.

Запускаю, форма висит... еще бы...пингуется 33 компа.
Дело - то делает, но у меня оно должно каждую секунду обновлять картинку назеленую или красну (есть или нет пинг).

VB.NET
1
2
3
4
5
6
7
8
9
10
11
 For i As Integer = 0 To DataGridView1.RowCount - 1
 
            Dim IP As String = DataGridView1.Item(2, i).Value
 
            If My.Computer.Network.Ping(IP, 2) Then
                DataGridView1.Rows(i).Cells(0).Value = New Bitmap("C:\box_green.png")
            Else
                DataGridView1.Rows(i).Cells(0).Value = New Bitmap("C:\box_red.png")
            End If
 
        Next
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.10.2011, 02:25
Ответы с готовыми решениями:

Помочь вождю выбрать кучку с монетами
Всем привет. Я начал заниматься C(да, именно С) неделю назад. Нужно для ЕГЭ. Сижу, решаю задачки разные и тут наткнутся на такую. Главный...

Купили бы или нет кучку ссылок
Так как это не конкретное предложение о покупке ссылок, а просто обсуждение, то размещаю тут,а не в барахолке.<div>Купили бы пакет...

Как загрузить кучку БОТОВ на IRC ???
Народ, приветы! Как загрузить кучу ботов на IRC и завести их на канал??? Чета у меня не прет...

35
Почетный модератор
 Аватар для Памирыч
23253 / 9167 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
01.10.2011, 15:30
Студворк — интернет-сервис помощи студентам
Так ты и пиши про подход, а не про программиста

Цитата Сообщение от Ciberst Посмотреть сообщение
как видишь
нет, не вижу. Только в понедельник смогу проверить, хотя смысл - те же потоки, тот же пинг. Только не 4, а 3 потока у меня было
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
01.10.2011, 15:32
Памирыч, создал к этим 4 еще десять - ни одной ошибки
0
Почетный модератор
 Аватар для Памирыч
23253 / 9167 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
01.10.2011, 15:36
Цитата Сообщение от Ciberst Посмотреть сообщение
создал к этим 4 еще десять
Скорость увеличилась в 10 раз?
Или хотя бы вдвое?
0
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407
01.10.2011, 15:37  [ТС]
Ciberst, создал проект, добавил модуль Module1, вставил в него твой код, в форме на баттон посоветовал ему при нажатии

VB.NET
1
2
Private Sub Button1_Click
Call Module1.Main()
Я неправильно сконструировал пример?
Потому как полное зависание формы, впрочем как и при моем примере в топе.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
01.10.2011, 15:38
Ciberst, то, что пинговаться будет в нескольких потоках - это верно. Но вот, если все потоки полезут через один порт, то результаты могут быть несколько некорректными. Особенно в слабых сетях. С увеличением количества потоков, возможность ошибки также растет.
1
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
01.10.2011, 15:42
fasked, по хорошему, конечно, нужно разные порты, но в данном случае я не могу поставить порт, так как особенность конструкции в данном языке, надо использовать другую функцию, тогда порты можно будет указывать

Добавлено через 15 секунд
abbat81, то было консольное приложение
0
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407
01.10.2011, 15:43  [ТС]
Вобщем протестил.
Вопрос не снялся.
Оставил один поток. дал диапазон 0-3
Пришлось ждать пока отклеит форму по истечении 3 пингов.

Не исключаю, что в потоках оно будет пинговать параллельно. разные заданые диапазоны указаных адресов, но на примере одного потока видно, что пока не пройдет 2-3 сек. на получение отрицательного значения пинга, следующий адрес не запингует.
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
01.10.2011, 15:47
Памирыч, повесил на каждый ip адресс локалки по одному потоку (256 потоков) почти 7-12 секунд
в онлайне было 3 компа
(тестировал в домашних условиях большего количества компов у меня не нашлось)
0
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407
01.10.2011, 15:48  [ТС]
Цитата Сообщение от Ciberst Посмотреть сообщение

Добавлено через 15 секунд
abbat81, то было консольное приложение
Сори. В консоле увидел интересную вещь.
Если создать например мне 33 потока, то результат по всем я увижу черес каждую секунду.
Это интересное решение.
Осталось разобраться, как это внедрить в мои 33 адреса.
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
01.10.2011, 15:56
abbat81, мне просто жутко лень делать это для винформ, там нужны будут делегаты всякие, чтобы менять значение картинки, а мне это ух, как не хочется делать.
0
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407
01.10.2011, 16:01  [ТС]
Ciberst, я не буду просить про то, что трудоемкое.
Хочу попросит, потому как запутался с циклом.
Прошу подсказать на модуле без диапазонов где не старт-финиш, а уже указан адресс
где
oWorker1 = "192.168.1.101"
oWorker2 = "192.168.1.102"

вместо

oWorker2.Start = 64
oWorker2.Finish = 127
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
01.10.2011, 16:29
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Imports System.Threading
Public Class Form1
    Public Shared t As Date
 
    Public Shared a As New Hashtable
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        t = Now
        For i = 0 To 255
 
            Dim Thread6 As Thread
            Dim oWorker6 As New WorkerThreadClass()
            Thread6 = New Thread(AddressOf _
          oWorker6.WorkerThread)
            'передаем исходные данные:
            oWorker6.Start = i
            oWorker6.Finish = i
 
            Thread6.Start()
        Next
 
    End Sub
    Public Class WorkerThreadClass
        Public Start As Integer
        Public Finish As Integer
        Public Sub WorkerThread()
            For i = Start To Finish
 
                If My.Computer.Network.Ping("192.168.0." & i) Then
                    'MsgBox("онлайн 192.168.0." & i)
                    a("192.168.0." & i) = True
                Else
                    a("192.168.0." & i) = False
                End If
       
 
                If i = 255 Then
                    System.Threading.Thread.Sleep(3000)
                    For ix = 0 To 255
 
                        Dim Thread6 As Thread
                        Dim oWorker6 As New WorkerThreadClass()
                        Thread6 = New Thread(AddressOf _
                      oWorker6.WorkerThread)
                        'передаем исходные данные:
                        oWorker6.Start = ix
                        oWorker6.Finish = ix
                        Thread6.Start()
                    Next
                End If
 
            Next
        End Sub
    End Class
    Dim x As Integer
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        ListView1.Clear()
        x = a.Count
        If x <> 256 Then Exit Sub
        For Each str3 As System.Collections.DictionaryEntry In a
            Application.DoEvents()
            If str3.Value = True Then
                ListView1.Items.Add(str3.Key)
            End If
        Next
    End Sub
End Class
для winforms сделал на форму добавился таймер, listview

Добавлено через 5 минут
ну этот код, так себе, не сгодится для больших проектов
0
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407
01.10.2011, 16:32  [ТС]
Ciberst, не могу переделать этот код на указанные адреса.

Можно ли без Старт-Финиш?

где
oWorker1 = "192.168.1.101"
oWorker2 = "192.168.1.102"
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
01.10.2011, 16:35
abbat81, код выше показывает как я присваивал только один IP адрес одному потоку, но тот код мне очень не нравится, надо переделать его.
0
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407
01.10.2011, 16:40  [ТС]
Ciberst,
For i = 0 To 255
oWorker6.Start = i
oWorker6.Finish = i

If My.Computer.Network.Ping("192.168.0." & i)


Все вращается вокруг цикла "i"
0
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407
09.10.2011, 15:15  [ТС]
Имеем пример с двумя потоками. Но так, как предполагается множетсво таких потов при том, не всегда известно сколько их будет, столкнулся с проблемой синтаксиса написания цикла.

Как эти два потока получить в цикле?

VB.NET
1
2
3
 For i = 1 To 2
     ..................
        Next
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 Sub Main()
        ' описание первого процесса
        Dim Thread1 As Thread
        Dim oWorker1 As New WorkerThreadClass()
        Thread1 = New Thread(AddressOf _
          oWorker1.WorkerThread)
        ' Thread1.Priority = _
        '  ThreadPriority.BelowNormal  
        ' передаем исходные данные:
        oWorker1.Start = 101
 
        ' описание второго процесса
        Dim Thread2 As Thread
        Dim oWorker2 As New WorkerThreadClass()
        Thread2 = New Thread(AddressOf _
           oWorker2.WorkerThread)
        ' передаем исходные данные:
        oWorker2.Start = 102
 
        Thread1.Start()
        Thread2.Start()
 
        Thread1.Join()
        Thread2.Join()
    End Sub

Заштопорился на связывании "Thread + i", "oWorker + i"

Добавлено через 8 минут
Как правильно должно выглядеть вот такой код?

VB.NET
1
2
3
4
5
6
7
8
9
10
Dim Thread As Thread
 
For i = 1 To 2
        Dim oWorker &i As New WorkerThreadClass()
        Thread&i = New Thread(AddressOf _
          oWorker&i.WorkerThread)
          oWorker&i.Start = 101
          Thread&i.Start()
          Thread&i.Join()
Next
Добавлено через 32 минуты
Получилось так:

VB.NET
1
2
3
4
5
6
7
8
9
 For i = 1 To 2
 
            Dim Thread(i) As Thread
            Dim oWorker(i) As New WorkerThreadClass()
            Thread(i) = New Thread(AddressOf _
              oWorker(i).WorkerThread)
            oWorker(i).Start = 101
 
        Next
Но правильно ли получится в цикле Thread(i) = Thread1, Thread2 ?
Или это Thread(х) - свойство какое-то ?

И еще. Dim oWorker(i) As New WorkerThreadClass() - ругается:

Массивы не могут объявляться с помощью ключевого слова New

Это означает, что нельзя в цикле создавать ничего нового?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.10.2011, 15:15

Как грамотно передать кучу данных из формы в model (mvc) а затем в БД?
Например форма с полями для ввода ФИО и даты рождения и соответственная таблица в бд (Person). Просто сделать функцию public void...

Как пропинговать порт
Как пропинговать порт ?

Как пропинговать сервер
Установил VirtualBox там развернул дебиан, всё по умолчанию, запускаю в браузере вирт.машины ya.ru всё нормально, набираю ificonfig...

Пропинговать сервер игры
Здравствуйте. Раньше не работал с сетями, но совсем недавно понадобилось проверить статус игровых серверов. А как известно, формат...

Как пропинговать IP - адрес
доброго времени суток! подскажите пожалуйста как пропинговать IP - адрес?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru