|
Dalam beberapa tahun terakhir, pembaca RFID, gateway rumah pintar, sensor suhu dan kelembaban sering digunakan dalam pekerjaan, umumnya ada port serial dan port jaringan, karena alasan di tempat, port serial umumnya kurang digunakan, kebanyakan menggunakan port jaringan. Metode koneksinya adalah alamat IP dan port, beberapa perangkat memiliki perangkat lunak pencarian, beberapa tidak. Seringnya penggunaan lingkungan pengujian dan situs pasti membingungkan. Pembaca RFID terbaru menggunakan modul port ke port serial Ethernet ZN-100, dan perangkat lunak pencarian (ZNetCom Utility) bagus dan kecepatan pencariannya juga sangat cepat. (Seperti yang ditunjukkan di bawah)
Saya berpikir untuk mengembangkannya sendiri, pertama-tama, segmen IP dan port dapat disesuaikan, yang mudah digunakan; Kecepatan pencarian harus cepat, dan saya terburu-buru untuk menggunakan multithreading dan asinkron. Mari kita ambil foto dulu.
- #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
- 如果使用同步方法会有明显的卡顿,用户体验不好;使用异步感觉很流畅,很爽,自己可以注释代码亲测。
Salin kodeKode sumber berkontribusi:
IP端口扫描.rar
(31.73 KB, Jumlah unduhan: 12)
|