|
In de afgelopen jaren worden RFID-lezers, slimme huisgateways, temperatuur- en vochtigheidssensoren vaak gebruikt op het werk; meestal zijn er seriële poorten en netwerkpoorten; vanwege on-site redenen worden seriële poorten over het algemeen minder gebruikt, de meeste gebruiken netwerkpoorten. De verbindingsmethode is IP-adres en poort, sommige apparaten hebben zoeksoftware, andere niet. Frequent gebruik van de testomgeving en de locatie is onvermijdelijk verwarrend. Een recente RFID-lezer gebruikt een ZN-100 Ethernet port-naar-seriële poortmodule, en de zoeksoftware (ZNetCom Utility) is goed en de zoeksnelheid is ook zeer snel. (Zoals hieronder weergegeven)
Ik dacht eraan er zelf een te ontwikkelen, allereerst kunnen het IP-segment en de poort worden aangepast, wat makkelijk te gebruiken is; De zoeksnelheid moet hoog zijn, en ik heb haast om multithreading en asynchrone te gebruiken. Laten we eerst een foto maken.
- #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 kopiërenBroncode draagt bij:
IP端口扫描.rar
(31.73 KB, Aantal downloads: 12)
|