powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Многопоточность
28 сообщений из 28, показаны все 2 страниц
Многопоточность
    #39258023
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!
Такой вопрос:
хочу пропинговать ту, или иную подсеть и найти все свободные ипы.
Вопрос во времени, если все пускать одним циклом в одном потоке, то все будет долго.
Если я буду каждый пинг пускать в отдельном потоке, 253 потока, это же не знаю как назвать:)
Или как в таких случаях делают?
...
Рейтинг: 0 / 0
Многопоточность
    #39258028
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потоки не нужны, просто создается 253 сокета, и пингуют они асинхронно.
...
Рейтинг: 0 / 0
Многопоточность
    #39258030
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, 253 это возможно многовато, я в такой ситуации, уже не помню почему, открывал 30, и по мере освобождения подсовывал им следующие адреса из очереди.
...
Рейтинг: 0 / 0
Многопоточность
    #39258035
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624хочу пропинговать ту, или иную подсеть и найти все свободные ипы.отсутствие ответа на ICMP запрос - не означает, что адрес свободен
...
Рейтинг: 0 / 0
Многопоточность
    #39258046
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

да, все верно, я чтобы понять принцип, как в таких ситуациях быть.
...
Рейтинг: 0 / 0
Многопоточность
    #39258075
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Многопоточность
    #39258080
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще в 1 сети может быть больше 253 адресов :)
...
Рейтинг: 0 / 0
Многопоточность
    #39258085
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624да, все верно, я чтобы понять принцип, как в таких ситуациях быть.Использовать ARP протокол.
...
Рейтинг: 0 / 0
Многопоточность
    #39258087
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

не, тут весь цЫнус в изучении c#:)
...
Рейтинг: 0 / 0
Многопоточность
    #39258092
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Алексей К,

не, тут весь цЫнус в изучении c#:)Тогда в дополнение к C# придётся изучить Using the Address Resolution Protocol и .Net PInvoke

Тут есть примеры.
...
Рейтинг: 0 / 0
Многопоточность
    #39258143
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624цЫнус
Цимес
...
Рейтинг: 0 / 0
Многопоточность
    #39258150
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилmishanya3624цЫнус
Цимесцимес + анус = цынус
...
Рейтинг: 0 / 0
Многопоточность
    #39258190
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Алексей Кmishanya3624да, все верно, я чтобы понять принцип, как в таких ситуациях быть.Использовать ARP протокол.
Нет в Мире совершенства

Для работы через ARP используется вызов
[DllImport("iphlpapi.dll", ExactSpelling = true)]
Пример
http://stackoverflow.com/questions/1148778/how-do-i-access-arp-protocol-information-through-net

Прикол в том, что это работает ТОЛЬКО внутри одной сети.
У меня сетей, как у дурака фантиков.

Наверное я что-то не понимаю или не знаю, но MAC- адрес, а следовательно подтверждение соединения по сети с удаленным компом можно получит выполнив команду NBTSTAT. Я не понимаю, как она работает.
Был бы признателен, если бы кто объяснил.


Для определения работы компа в сети можно попробовать открыть порт 137/udp, который используется NBTSTAT.
Обычно он открыт.
...
Рейтинг: 0 / 0
Многопоточность
    #39258198
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Прикол в том, что это работает ТОЛЬКО внутри одной сети.ТС вроде как именно этого и хотел.
Cat2Для определения работы компа в сети можно попробовать открыть порт 137/udp, который используется NBTSTAT.
Обычно он открыт.Открыть можно любой порт и попытаться к нему подсоединиться. Но гарантий открытости порта никаких.
...
Рейтинг: 0 / 0
Многопоточность
    #39258200
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Еще раз огромное спасибо мемберу Изоприл, только благодаря его ценным указаниям мне удалось сделать этот пример по ограничению одновременно выполняемых потоков. См.
Непонятная ошибка по границам массива

Код: c#
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.
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplicationTasks
{
    class Program
    {
       
        static void Main(string[] args)
        {
            int cnt = 1024; // количество фигни, которую надо обработать
            int k = 0;
            int maxk = 50; // максимально допустимое количество потоков, которую обрабатывае фигня. Подбирапется экспериментальным путем
            string[] a = new string[cnt];
            List<Task> tasks = new List<Task>();
            
            for (int i = 0; i < cnt; i++)
            {
                k++;
                int j = i;
                a[i] = string.Format("{0} {1}", j,k);
               
                tasks.Add(Task.Factory.StartNew(() =>
                {
                    Fignia(a[j]);
                }));
                //запустили maxk потоков - ждем-с пока кто-то не отработает. 
                if (k == maxk)
                {
                    k--;
                    Task.WaitAny(tasks.ToArray());
                }
            }
            Task.WaitAll(tasks.ToArray());
            Console.ReadLine();
        }
        static void Fignia(string ik)
        {
            //Имитация процессов с разным временем выполнения
            Random rnd = new Random();
            Thread.Sleep(rnd.Next(50, 5000));
            Console.WriteLine(ik);
        }
    }
}


Наверное это не лучшее решение, но хоть так
...
Рейтинг: 0 / 0
Многопоточность
    #39258203
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Алексей КCat2Прикол в том, что это работает ТОЛЬКО внутри одной сети.ТС вроде как именно этого и хотел.
Cat2Для определения работы компа в сети можно попробовать открыть порт 137/udp, который используется NBTSTAT.
Обычно он открыт.Открыть можно любой порт и попытаться к нему подсоединиться. Но гарантий открытости порта никаких.
Гарантии открытости порта дает руководство, специальным приказом

В минуты отчаяния, когда ничего не получается, я мечтаю о том, что можно бы было работать в маленькой компании, где всего 10 000 компов и все они включены в одну сеть
...
Рейтинг: 0 / 0
Многопоточность
    #39258534
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Или как в таких случаях делают?
В таких случаях через жопу не делают вообще. Либо подними DHCP сервер и пусть он раздает IP, либо напиши регламент кому какой IP можно выдать и кто должен вести учет, а в случае задвоения наказывай рублем того кто выдал два одинаковых IP.
...
Рейтинг: 0 / 0
Многопоточность
    #39258536
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

регламент всё равно нужно писать для DHCP сервера
...
Рейтинг: 0 / 0
Многопоточность
    #39258694
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет комрады, внутри сети все отлично настроено и работает.
Еще раз, разбираюсь с C# в свободное от работы время и на разных примерах,в основном, которые сам для себя придумываю и изучаю потихоньку.
...
Рейтинг: 0 / 0
Многопоточность
    #39259562
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несколько вопросов:
1. Как дождаться окончания всех асинхронных процессов, чтобы не создавать второй поток и делать ему Sleep?
2. Как сделать сортировку по возрастанию, сохранить все адреса в List и из него уже сделать выборку по возрастанию, что-то не получается...

Код: c#
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.
class Program
    {
        static DateTime start = DateTime.Now;       
        static string ss = "192.168.";
        static void Main(string[] args)
        {    
       
            Console.Write("Enter number:");
            string num = Console.ReadLine();
            ss = ss + num + ".";
            Console.WriteLine(start);

            Pinger(new int[40], 0);
            Pinger(new int[80], 40);
            Pinger(new int[120], 80);
            Pinger(new int[160], 120);
            Pinger(new int[200], 160);
            Pinger(new int[240], 200);
            Pinger(new int[253], 240);

            Thread th = new Thread(Time);
            th.Start();
          
            Console.ReadLine();
        
        } 
        public static void Time()
        {        
            
            Thread.Sleep(20000);
            DateTime end = DateTime.Now;
            Console.Write(end - start);            
            
        }
 
        static async void Pinger(int[] Arr , int i)
        {
            using (Ping p = new Ping())
            {
               
                for (; i < Arr.Length; i++)
                {
                    PingReply pr = await p.SendPingAsync(ss + i, 100);
                    List<string> s1 = new List<string>();
                    s1.Add(ss + i);
                    
                    var sort = from u in s1 orderby i where pr.Status == IPStatus.Success select u ;
                    foreach(string u in sort)
                    Console.WriteLine(u);               
                        
                    
           
                }
            
            }

        }     
   
    }


Спасибо.
...
Рейтинг: 0 / 0
Многопоточность
    #39259569
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Еще раз, разбираюсь с C# в свободное от работы время и на разных примерах,в основном, которые сам для себя придумываю и изучаю потихоньку.
Почитай лучше книжку какую-нибудь, где примеры уже придуманы и тщательно разобраны. Например Рихтера
...
Рейтинг: 0 / 0
Многопоточность
    #39262609
Dude42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mishanya36241. Как дождаться окончания всех асинхронных процессов, чтобы не создавать второй поток и делать ему Sleep?
Что-то типа этого

https://msdn.microsoft.com/en-us/library/dd270695(v=vs.110).aspx

или этого

https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.whenall(v=vs.110).aspx

И ещё

http://stackoverflow.com/questions/6123406/waitall-vs-whenall

Хотя TaskEx, по-поему, это что-то типа устаревшего расширения, выходившего, пока новая версия .NET не вышла (поправьте, если я неправ) - теперь всё через один класс Task делается.

А вообще, вот хорошая серия статей из книги Альбахари

http://www.albahari.com/threading/
...
Рейтинг: 0 / 0
Многопоточность
    #39262711
Dude42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mishanya3624Изопропил,

да, все верно, я чтобы понять принцип, как в таких ситуациях быть.
А что, какие-то проблемы возникли? Ничего не пингуется?

Вас пугает само число потоков? В дотнете последних версий их можно десятки тысяч создавать.

Вы хотите ограничить число потоков, одновременно пингующих? - Попробуйте Semaphore .
...
Рейтинг: 0 / 0
Многопоточность
    #39262727
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dude42В дотнете последних версий их можно десятки тысяч создавать.
дожили.
...
Рейтинг: 0 / 0
Многопоточность
    #39263142
Dude42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилDude42В дотнете последних версий их можно десятки тысяч создавать.
дожили.
Я имел ввиду что-то типа этого http://stackoverflow.com/a/145323/5015385
А то непонятно, почему человек стесняется создавать потоки. Вроде, пока с какой-то проблемой, связанной с этим, не столкнулся, но уже заранее стесняется.
...
Рейтинг: 0 / 0
Многопоточность
    #39263161
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dude42Я имел ввиду что-то типа этого http://stackoverflow.com/a/145323/5015385
А толку? 100500 велосипедистов на 4х велосипедах далеко уедут? Потоков должно быть чуть больше чем доступно ядер, остальное - тормоза из-за переключения контекста.
...
Рейтинг: 0 / 0
Многопоточность
    #39263169
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для ICMP достаточно одного потока ( с асинхронным вводом-выводом)
...
Рейтинг: 0 / 0
Многопоточность
    #39263185
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилдля ICMP достаточно одного потока ( с асинхронным вводом-выводом)
Так вроде нет его для Ping
Я так понимаю SendAsync() это просто новый поток в котором ожидание будет, а что-то типа Stream.BeginRead() с коллбэком по приходу ответа там нет.
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Многопоточность
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]