|
Viimastel aastatel on töös sageli kasutatud RFID-lugejaid, nutikodu väravaid, temperatuuri- ja niiskusandureid, üldiselt on olemas seriaalpordid ja võrgupordid, kuid kohapealsetel põhjustel kasutatakse seriaalporte üldiselt vähem, enamik neist kasutab võrguporte. Ühendusmeetod on IP-aadress ja port, mõnel seadmel on otsingutarkvara, mõnel mitte. Testikeskkonna ja saidi sagedane kasutamine on paratamatult segadust tekitav. Hiljutine RFID-lugeja kasutab ZN-100 Etherneti portist seriaalporti moodulit ning otsingutarkvara (ZNetCom Utility) on hea ja otsingukiirus samuti väga kiire. (Nagu allpool näidatud)
Mõtlesin ise selle välja arendada, kõigepealt saab IP segmenti ja porti kohandada, mis on lihtne kasutada; Otsingukiirus peab olema kiire ja mul on kiire kasutada multithreadingut ja asünkroonsust. Teeme kõigepealt pilti.
- #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
- 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Kopeeri koodLähtekood panustab:
IP端口扫描.rar
(31.73 KB, Allalaadimiste arv: 12)
|