See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 22382|Vastuse: 7

[WinForm] 【High Speed】C# IP-aadressi segmendi pordi mitmelõimeline skanner

[Kopeeri link]
Postitatud 11.12.2015 15:17:37 | | | |

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.



  1. #region 扫描方法

  2.         public void Scan(string m_host, int m_port)
  3.         {
  4.             //我们直接使用比较高级的TcpClient类
  5.             TcpClient tc = new TcpClient();
  6.             //设置超时时间
  7.             tc.SendTimeout = tc.ReceiveTimeout = 2000;

  8.             try
  9.             {
  10.                 //同步方法
  11.                   //IPAddress ip = IPAddress.Parse(host);
  12.                 //IPEndPoint IPendp = new IPEndPoint(ip, port);
  13.                 //tc.Connect(IPendp);

  14.                 //异步方法
  15.                 IAsyncResult oAsyncResult = tc.BeginConnect(m_host, m_port, null, null);
  16.                 oAsyncResult.AsyncWaitHandle.WaitOne(1000, true);//1000为超时时间

  17.                 if (tc.Connected)
  18.                 {
  19.                     //如果连接上,证明此端口为开放状态
  20.                        UpdateListBox(listBox1, m_host + ":" + m_port.ToString());
  21.                 }
  22.             }
  23.             catch (System.Net.Sockets.SocketException e)
  24.             {
  25.                 //容错处理
  26.                 //MessageBox.Show("Port {0} is closed", host.ToString());
  27.                 //Console.WriteLine(e.Message);
  28.             }
  29.             finally
  30.             {              
  31.                 tc.Close();
  32.                 tc = null;               
  33.                 scannedCount++;
  34.                 runningThreadCount--;

  35.             }
  36.         }
  37.         #endregion
  38. 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Kopeeri kood

Lähtekood panustab: IP端口扫描.rar (31.73 KB, Allalaadimiste arv: 12)






Eelmine:Millised protokollid põhinevad TCP-l ja millised UDP-l?
Järgmine:Void pointer basic
Postitatud 11.12.2015 15:51:53 |
Postitatud 11.12.2015 18:00:48 |
Kiire:Postituse blokeeris administraator või moderaator
Postitatud 22.05.2016 15:13:38 |
See on väga hea
Postitatud 20.08.2016 16:35:02 |
Selgub, et omaniku skaneerimisproksitarkvara on samuti selle lähtekoodi põhjal täiustatud. Täname!
Postitatud 21.08.2016 13:11:18 |
Miks see ei tööta?
 Üürileandja| Postitatud 03.12.2025 11:58:07 |
TCP pordi ühenduvuse test



 Üürileandja| Postitatud 03.12.2025 11:58:49 |
.NET/C# kontrollib, kas TCP port on saadaval
https://www.itsvse.com/thread-10721-1-1.html
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com