|
Pastaraisiais metais darbe dažnai naudojami RFID skaitytuvai, išmaniųjų namų šliuzai, temperatūros ir drėgmės jutikliai, paprastai yra nuoseklieji prievadai ir tinklo prievadai, dėl priežasčių vietoje nuoseklieji prievadai paprastai naudojami rečiau, dauguma jų naudoja tinklo prievadus. Prisijungimo būdas yra IP adresas ir prievadas, kai kurie įrenginiai turi paieškos programinę įrangą, kiti ne. Dažnas bandymo aplinkos ir svetainės naudojimas neišvengiamai painus. Naujausias RFID skaitytuvas naudoja ZN-100 Ethernet port-to-serial prievado modulį, o paieškos programinė įranga (ZNetCom Utility) yra gera, o paieškos greitis taip pat labai greitas. (Kaip parodyta žemiau)
Aš galvojau sukurti pats, visų pirma, IP segmentą ir prievadą galima pritaikyti, o tai lengva naudoti; Paieškos greitis turi būti greitas, o aš skubu naudoti kelių gijų ir asinchroninį. Pirmiausia nufotografuokime.
- #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
- 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Kopijuoti kodąŠaltinio kodas prisideda:
IP端口扫描.rar
(31.73 KB, Atsisiuntimų skaičius: 12)
|