Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 22382|Resposta: 7

[WinForm] 【Scanner multithreaded de segmento de endereço IP em alta velocidade】C#

[Copiar link]
Publicado em 11/12/2015 15:17:37 | | | |

Nos últimos anos, leitores RFID, gateways residenciais inteligentes, sensores de temperatura e umidade são frequentemente usados no trabalho; geralmente há portas seriais e de rede; por razões no local, as portas seriais são geralmente menos usadas, a maioria delas usa portas de rede. O método de conexão é endereço IP e porta, alguns dispositivos têm software de busca, outros não. O uso frequente do ambiente de teste e do site inevitavelmente é confuso. Um leitor RFID recente usa um módulo de porta Ethernet ZN-100 para porta serial, e o software de busca (ZNetCom Utility) é bom e a velocidade de busca também é muito rápida. (Como mostrado abaixo)

Pensei em desenvolver um eu mesmo, primeiro, o segmento de IP e a porta podem ser personalizados, o que é fácil de usar; A velocidade de busca deve ser rápida, e estou com pressa para usar multithreading e assíncrono. Vamos tirar uma foto primeiro.



  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. 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Copiar código

O código-fonte contribui: IP端口扫描.rar (31.73 KB, Número de downloads: 12)






Anterior:Quais protocolos são baseados em TCP e quais são baseados em UDP?
Próximo:Ponteiro Void Básico
Publicado em 11/12/2015 15:51:53 |
Publicado em 11/12/2015 18:00:48 |
Rápido:A postagem foi bloqueada por um administrador ou moderador
Publicado em 22/05/2016 15:13:38 |
É muito bom
Publicado em 20/08/2016 16:35:02 |
Acontece que o software de proxy de varredura do proprietário também foi aprimorado em relação a esse código-fonte. Obrigado!
Publicado em 21/08/2016 13:11:18 |
Por que isso não pode funcionar?
 Senhorio| Publicado em 03/12/2025 11:58:07 |
Teste de conectividade de portas TCP



 Senhorio| Publicado em 03/12/2025 11:58:49 |
.NET/C# verifica se uma porta TCP está disponível
https://www.itsvse.com/thread-10721-1-1.html
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com