|
최근 몇 년간 RFID 리더기, 스마트 홈 게이트웨이, 온도 및 습도 센서가 업무에 자주 사용되며, 일반적으로 직렬 포트와 네트워크 포트가 있습니다. 현장 문제로 인해 직렬 포트는 일반적으로 덜 사용되며, 대부분은 네트워크 포트를 사용합니다. 연결 방식은 IP 주소와 포트이며, 일부 기기에는 검색 소프트웨어가 있고 어떤 기기는 없습니다. 테스트 환경과 사이트를 자주 사용하면 불가피하게 혼란스러워집니다. 최근 RFID 리더기는 ZN-100 이더넷 포트-시리얼 포트 모듈을 사용하며, 검색 소프트웨어(ZNetCom 유틸리티)가 우수하고 검색 속도도 매우 빠릅니다. (아래 참조)
저도 직접 개발해볼까 생각했는데, 우선 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)
|