2012-08-08 71 views
0

我正在開發一個C#.net應用程序,我在其中與USB 3G調制解調器Com端口進行通信以發送和接收消息。如何從端口列表中獲取用戶界面Com端口?

下面是我目前使用的用於獲取端口的列表,我的代碼:

string[] ports = SerialPort.GetPortNames(); 

現在我想從端口的列表只UI端口,例如,如果3G調制解調器有兩個端口說的COM4和COM6,其中第一個是應用程序接口端口,另一個是UI端口。

如何以編程方式獲取UI端口?

+1

我不能回答這個問題,但我很好奇,因爲我從來沒有聽說過與UI端口關聯的「UI」。 (可能只是我的無知。)你能告訴我這個嗎?什麼是UI端口? – David 2012-08-08 13:22:45

+0

你是什麼意思的UI端口?調制解調器的用戶界面?還是你通過串口線連接到電腦?這是不是發展? – user957902 2012-08-08 13:24:12

+0

好user957902我正在談論GSM調制解調器的COm端口這個調制解調器與兩個COM端口一起工作,一個用於與互聯網數據傳輸的應用通信,另一個用於用戶ibterface用於處理另一個GSM相關任務,例如SMS,呼叫等。 – hi0001234d 2012-08-08 17:23:36

回答

2

串口不知道在另一端連接了什麼。您需要嘗試打開每一個,併發送像"AT\r\n"這樣的東西,並期望"OK"檢查您的調制解調器連接了哪一個。

編輯:

using System; 
    using System.IO.Ports; 
    using System.Collections; 
    using System.Collections.Generic; 
    using System.Text; 


    private static bool IsModem(string PortName) 
    { 

     SerialPort port= null; 
     try 
     { 
     port = new SerialPort(PortName,9600); //9600 baud is supported by most modems 
     port.ReadTimeout = 200; 
     port.Open(); 
     port.Write("AT\r\n"); 

     //some modems will return "OK\r\n" 
     //some modems will return "\r\nOK\r\n" 
     //some will echo the AT first 
     //so 
     for(int i=0;i<4;i++) //read a maximum of 4 lines in case some other device is posting garbage 
     { 
       string line = port.ReadLine(); 
       if(line.IndexOf("OK")!=-1) 
       { 
       return true; 
       } 
     } 
     return false; 


     } 
     catch(Exception ex) 
     { 
     // You should implement more specific catch blocks so that you would know 
     // what the problem was, ie port may be in use when you are trying 
     // to test it so you should let the user know that as he can correct that fault 

      return false; 
     } 
     finally 
     { 
     if(port!=null) 
     { 
      port.Close(); 
     }  
     } 



    } 

    public static string[] FindModems() 
    { 
     List<string> modems = new List<string>(); 
     string[] ports = SerialPort.GetPortNames(); 

     for(int i =0;i<ports.Length;i++) 
     { 
     if(IsModem(ports[i])) 
     { 
      modems.Add(ports[i]); 
     } 
     } 
     return modems.ToArray(); 
    } 

像這樣的事情應該工作,我沒有測試它(不能測試它)。

+0

感謝SS'Kain'的答覆,請你解釋它是如何工作的,或者如果有任何代碼示例,那麼它更可期待 – hi0001234d 2012-08-08 17:24:05