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

Вид: 22382|Ответ: 7

[WinForm] 【Многопоточный сканер сегмента IP-адреса High Speed】C#

[Скопировать ссылку]
Опубликовано 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