|
Pēdējos gados darbā bieži tiek izmantoti RFID lasītāji, viedās mājas vārtejas, temperatūras un mitruma sensori, parasti ir seriālie porti un tīkla porti, vietējo iemeslu dēļ seriālās ostas parasti tiek izmantotas mazāk, lielākā daļa no tām izmanto tīkla portus. Savienojuma metode ir IP adrese un ports, dažām ierīcēm ir meklēšanas programmatūra, dažām nav. Bieža testa vides un vietnes izmantošana ir neizbēgami mulsinošs. Nesenais RFID lasītājs izmanto ZN-100 Ethernet port-to-serial port moduli, un meklēšanas programmatūra (ZNetCom Utility) ir laba, un meklēšanas ātrums ir arī ļoti ātrs. (Kā parādīts zemāk)
Es domāju par tā izstrādi, pirmkārt, IP segmentu un portu var pielāgot, kas ir viegli lietojams; Meklēšanas ātrumam jābūt ātram, un es steidzos izmantot daudzpavedienu un asinhronu. Vispirms nofotografēsim.
- #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
- 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Kopēt koduPirmkods veicina:
IP端口扫描.rar
(31.73 KB, Lejupielādes skaits: 12)
|