|
În ultimii ani, cititoare RFID, gateway-uri pentru case inteligente, senzori de temperatură și umiditate sunt adesea folosiți la locul de muncă; în general, există porturi seriale și porturi de rețea, din motive on-site, porturile seriale sunt în general mai puțin folosite, majoritatea utilizând porturi de rețea. Metoda de conexiune este adresa IP și portul, unele dispozitive au software de căutare, altele nu. Utilizarea frecventă a mediului de testare și a site-ului este inevitabil confuză. Un cititor RFID recent folosește un modul port-port-serial Ethernet ZN-100, iar software-ul de căutare (ZNetCom Utility) este bun, iar viteza de căutare este, de asemenea, foarte mare. (Așa cum se arată mai jos)
M-am gândit să dezvolt unul eu însumi, în primul rând, segmentul IP și portul pot fi personalizate, ceea ce este ușor de folosit; Viteza căutării trebuie să fie rapidă și mă grăbesc să folosesc multithreading și asincron. Hai să facem o poză mai întâi.
- #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
- 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Cod de copiereCodul sursă contribuie:
IP端口扫描.rar
(31.73 KB, Numărul de descărcări: 12)
|