|
近年では、RFIDリーダー、スマートホームゲートウェイ、温度・湿度センサーが仕事でよく使われています。一般的にシリアルポートとネットワークポートがあります。現場の理由からシリアルポートの使用は少なく、ほとんどがネットワークポートを使用しています。 接続方法はIPアドレスとポートで、検索ソフトが搭載されているものもあれば、ないものもあります。 テスト環境や現場を頻繁に使うことは必然的に混乱を招きます。 最近のRFIDリーダーはZN-100イーサネットポートからシリアルポートへのモジュールを使用しており、検索ソフトウェア(ZNetCom Utility)は優れており、検索速度も非常に速いです。 (以下に示すように)
自分で開発しようかと考えました。まず第一に、IPセグメントとポートはカスタマイズでき、使いやすいです。 検索速度は速くなければならず、マルチスレッドと非同期を急いで使いたいと思っています。 まず写真を撮ろう。
- #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
- 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
コードをコピーしますソースコードが以下の内容に貢献しています:
IP端口扫描.rar
(31.73 KB, ダウンロード数: 12)
|