Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 22382|Відповідь: 7

[WinForm] 【Високошвидкісний】C# багатопотоковий сканер сегмента IP-адрес

[Копіювати посилання]
Опубліковано 11.12.2015 15:17:37 | | | |

Останніми роками на роботі часто використовують RFID-зчитувачі, шлюзи розумного дому, датчики температури та вологості, зазвичай існують послідовні та мережеві порти, але з причин на місці послідовні порти використовуються менше, більшість із них — мережеві. Метод підключення — IP-адреса та порт, деякі пристрої мають пошукове програмне забезпечення, деякі — ні. Часте використання тестового середовища та сайту неминуче заплутає. Сучасний RFID-зчитувач використовує модуль ZN-100 Ethernet-порт-послідовний порт, а пошукове програмне забезпечення (ZNetCom Utility) працює добре, а швидкість пошуку також дуже висока. (Як показано нижче)

Я думав розробити його сам, по-перше, сегмент IP і порт можна налаштовувати, це просто у використанні; Швидкість пошуку має бути високою, і я поспішаю використовувати багатопотоковий та асинхронний режим. Давай спочатку зробимо фото.



  1. #region 扫描方法

  2.         public void Scan(string m_host, int m_port)
  3.         {
  4.             //我们直接使用比较高级的TcpClient类
  5.             TcpClient tc = new TcpClient();
  6.             //设置超时时间
  7.             tc.SendTimeout = tc.ReceiveTimeout = 2000;

  8.             try
  9.             {
  10.                 //同步方法
  11.                   //IPAddress ip = IPAddress.Parse(host);
  12.                 //IPEndPoint IPendp = new IPEndPoint(ip, port);
  13.                 //tc.Connect(IPendp);

  14.                 //异步方法
  15.                 IAsyncResult oAsyncResult = tc.BeginConnect(m_host, m_port, null, null);
  16.                 oAsyncResult.AsyncWaitHandle.WaitOne(1000, true);//1000为超时时间

  17.                 if (tc.Connected)
  18.                 {
  19.                     //如果连接上,证明此端口为开放状态
  20.                        UpdateListBox(listBox1, m_host + ":" + m_port.ToString());
  21.                 }
  22.             }
  23.             catch (System.Net.Sockets.SocketException e)
  24.             {
  25.                 //容错处理
  26.                 //MessageBox.Show("Port {0} is closed", host.ToString());
  27.                 //Console.WriteLine(e.Message);
  28.             }
  29.             finally
  30.             {              
  31.                 tc.Close();
  32.                 tc = null;               
  33.                 scannedCount++;
  34.                 runningThreadCount--;

  35.             }
  36.         }
  37.         #endregion
  38. 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Копія коду

Вихідний код додає: IP端口扫描.rar (31.73 KB, Кількість завантажень: 12)






Попередній:Які протоколи базуються на TCP, а які — на UDP?
Наступний:Базовий вказівник
Опубліковано 11.12.2015 15:51:53 |
Опубліковано 11.12.2015 18:00:48 |
Оперативне:Пост було заблоковано адміністратором або модератором
Опубліковано 22.05.2016 15:13:38 |
Дуже добре
Опубліковано 20.08.2016 16:35:02 |
Виявляється, що проксі власника також покращене з урахуванням цього вихідного коду. Дякую!
Опубліковано 21.08.2016 13:11:18 |
Чому це не працює?
 Орендодавець| Опубліковано 03.12.2025 11:58:07 |
Тест підключення TCP-порту



 Орендодавець| Опубліковано 03.12.2025 11:58:49 |
.NET/C# перевіряє, чи доступний TCP-порт
https://www.itsvse.com/thread-10721-1-1.html
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com