|
Ces dernières années, les lecteurs RFID, les passerelles domotiques intelligentes, les capteurs de température et d’humidité sont souvent utilisés au travail ; en général, il existe des ports série et des ports réseau, pour des raisons sur site, les ports série sont généralement moins utilisés, la plupart utilisent des ports réseau. La méthode de connexion est l’adresse IP et le port, certains appareils ont un logiciel de recherche, d’autres non. L’utilisation fréquente de l’environnement de test et du site est inévitablement source de confusion. Un lecteur RFID récent utilise un module port Ethernet ZN-100 port-à-série et le logiciel de recherche (ZNetCom Utility) est bon et la vitesse de recherche est également très rapide. (Comme montré ci-dessous)
J’ai pensé à en développer un moi-même, d’abord, le segment IP et le port peuvent être personnalisés, ce qui est facile à utiliser ; La vitesse de recherche doit être rapide, et je suis pressé d’utiliser le multithreading et l’asynchrone. Prenons d’abord une photo.
- #region 扫描方法
- public void Scan(string m_host, int m_port)
- {
- //我们直接使用比较高级的TcpClient类
- TcpClient tc = new TcpClient();
- //设置超时时间
- tc.SendTimeout = tc.ReceiveTimeout = 2000;
- try
- {
- //同步方法
- //IPAddress ip = IPAddress.Parse(host);
- //IPEndPoint IPendp = new IPEndPoint(ip, port);
- //tc.Connect(IPendp);
- //异步方法
- IAsyncResult oAsyncResult = tc.BeginConnect(m_host, m_port, null, null);
- oAsyncResult.AsyncWaitHandle.WaitOne(1000, true);//1000为超时时间
- if (tc.Connected)
- {
- //如果连接上,证明此端口为开放状态
- UpdateListBox(listBox1, m_host + ":" + m_port.ToString());
- }
- }
- catch (System.Net.Sockets.SocketException e)
- {
- //容错处理
- //MessageBox.Show("Port {0} is closed", host.ToString());
- //Console.WriteLine(e.Message);
- }
- finally
- {
- tc.Close();
- tc = null;
- scannedCount++;
- runningThreadCount--;
- }
- }
- #endregion
- 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Code de copieLe code source contribue :
IP端口扫描.rar
(31.73 KB, Nombre de téléchargements: 12)
|