|
Τα τελευταία χρόνια, οι συσκευές ανάγνωσης RFID, οι έξυπνες οικιακές πύλες, οι αισθητήρες θερμοκρασίας και υγρασίας χρησιμοποιούνται συχνά στην εργασία, γενικά υπάρχουν σειριακές θύρες και θύρες δικτύου, για επιτόπιους λόγους, οι σειριακές θύρες χρησιμοποιούνται γενικά λιγότερο, οι περισσότερες από αυτές χρησιμοποιούν θύρες δικτύου. Η μέθοδος σύνδεσης είναι η διεύθυνση IP και η θύρα, ορισμένες συσκευές διαθέτουν λογισμικό αναζήτησης, άλλες όχι. Η συχνή χρήση του περιβάλλοντος δοκιμής και του ιστότοπου προκαλεί αναπόφευκτα σύγχυση. Ένας πρόσφατος αναγνώστης RFID χρησιμοποιεί μια μονάδα θύρας Ethernet ZN-100 σε σειριακή θύρα και το λογισμικό αναζήτησης (ZNetCom Utility) είναι καλό και η ταχύτητα αναζήτησης είναι επίσης πολύ γρήγορη. (Όπως φαίνεται παρακάτω)
Σκέφτηκα να αναπτύξω ένα μόνος μου, πρώτα απ 'όλα, το τμήμα IP και η θύρα μπορούν να προσαρμοστούν, κάτι που είναι εύκολο στη χρήση. Η ταχύτητα αναζήτησης πρέπει να είναι γρήγορη και βιάζομαι να χρησιμοποιήσω multithreading και ασύγχρονη. Ας βγάλουμε πρώτα μια φωτογραφία.
- #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)
|