|
Son yıllarda RFID okuyucular, akıllı ev geçitleri, sıcaklık ve nem sensörleri genellikle işte kullanılıyor; genellikle seri portlar ve ağ portları var, ancak yerdeki nedenlerle seri portlar genellikle daha az kullanılıyor, çoğu ağ portu kullanıyor. Bağlantı yöntemi IP adresi ve porttur, bazı cihazlarda arama yazılımı var, bazılarında yok. Test ortamının ve sitenin sıkça kullanılması kaçınılmaz olarak kafa karıştırıcıdır. Yakın zamanda kullanılan bir RFID okuyucu, ZN-100 Ethernet port-to-serial port modülü kullanıyor ve arama yazılımı (ZNetCom Utility) iyi ve arama hızı da çok hızlı. (Aşağıda gösterildiği gibi)
Kendim bir tane geliştirmeyi düşündüm, öncelikle IP segmenti ve portu özelleştirilebilir ve kullanımı kolay; Arama hızı hızlı olmalı ve çoklu iş dişiliği ile asenkron kullanmaya acele ediyorum. Önce bir fotoğraf çekelim.
- #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
- 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Kopya koduKaynak kodu katkıda bulunur:
IP端口扫描.rar
(31.73 KB, İndirme sayısı: 12)
|