0

我正在开发一个 C#.net 应用程序,在其中我与 USB 3G 调制解调器 Com 端口进行通信以发送和接收消息。

以下是我目前用于获取端口列表的代码:

string[] ports = SerialPort.GetPortNames();

现在我只想从端口列表中获取 UI 端口,例如,如果 3G 调制解调器有两个端口,例如 COM4 和 COM6,其中第一个是应用程序接口端口,另一个是 UI 端口。

如何以编程方式获取 UI 端口?

4

1 回答 1

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();
    }

像这样的东西应该可以工作,我没有测试它(无法测试它)。

于 2012-08-08T13:35:11.240 回答