Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 22382|Svar: 7

[WinForm] 【High Speed】C# IP-adresssegmentport multitrådad skanner

[Kopiera länk]
Publicerad på 2015-12-11 15:17:37 | | | |

Under de senaste åren används RFID-läsare, smarta hem-gateways, temperatur- och fuktighetssensorer ofta i arbetet, vanligtvis finns det seriella portar och nätverksportar, men av platsbaserade skäl används serieportar oftast mindre, de flesta använder nätverksportar. Anslutningsmetoden är IP-adress och port, vissa enheter har sökprogram, andra inte. Frekvent användning av testmiljön och platsen är oundvikligen förvirrande. En nyare RFID-läsare använder en ZN-100 Ethernet port-till-seriell portmodul, och sökprogramvaran (ZNetCom Utility) är bra och sökhastigheten är också mycket snabb. (Som visas nedan)

Jag funderade på att utveckla en själv, först och främst kan IP-segmentet och porten anpassas, vilket är lätt att använda; Sökhastigheten måste vara snabb, och jag har bråttom att använda multitrådning och asynkront. Låt oss ta en bild först.



  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. 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Kopiera koden

Källkodens bidrag: IP端口扫描.rar (31.73 KB, Antal nedladdningar: 12)






Föregående:Vilka protokoll är TCP-baserade och vilka är UDP-baserade?
Nästa:Void Pointer Basic
Publicerad på 2015-12-11 15:51:53 |
Publicerad på 2015-12-11 18:00:48 |
Snabb:Inlägget blockerades av en admin eller moderator
Publicerad på 2016-05-22 15:13:38 |
Det är mycket bra
Publicerad på 2016-08-20 16:35:02 |
Det visar sig att ägarens skanningsproxyprogramvara också förbättras med hänvisning till denna källkod. Tack!
Publicerad på 2016-08-21 13:11:18 |
Varför kan inte detta fungera?
 Hyresvärd| Publicerad på 2025-12-03 11:58:07 |
TCP-portanslutningstest



 Hyresvärd| Publicerad på 2025-12-03 11:58:49 |
.NET/C# kontrollerar om en TCP-port finns tillgänglig
https://www.itsvse.com/thread-10721-1-1.html
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com