如何从端口列表中获取用户界面Com端口?

问题描述:

我正在开发一个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

串口不知道在另一端连接了什么。您需要尝试打开每一个,并发送像"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