|
V zadnjih letih se pogosto uporabljajo RFID bralniki, pametni domači prehodi, temperaturni in vlažni senzorji, običajno so serijski in omrežni priključki, zaradi razlogov na lokaciji pa so serijski priključki običajno manj uporabljeni, večina uporablja omrežne priključke. Način povezave je IP naslov in priključek, nekatere naprave imajo iskalno programsko opremo, druge ne. Pogosta uporaba testnega okolja in spletne strani je neizogibno zmedena. Novejši RFID bralnik uporablja ZN-100 Ethernet modul med priključki in serijskimi priključki, iskalna programska oprema (ZNetCom Utility) je dobra, hitrost iskanja pa je prav tako zelo hitra. (Kot je prikazano spodaj)
Razmišljal sem, da bi ga razvil sam, najprej je IP segment in port mogoče prilagoditi, kar je enostavno za uporabo; Hitrost iskanja mora biti hitra, zato se mi mudi uporaba večnitnosti in asinhronega sistema. Najprej se slikajmo.
- #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
- 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Kopiraj kodoIzvorna koda prispeva:
IP端口扫描.rar
(31.73 KB, Število prenosov: 12)
|