0

メッセージを送受信するためにUSB3GモデムのComポートと通信するC#.netアプリを開発しています。

以下は、ポートのリストを取得するために現在使用しているコードです。

string[] ports = SerialPort.GetPortNames();

ここで、ポートのリストからUIポートのみを取得したいと思います。たとえば、3GモデムにCOM4とCOM6の2つのポートがあり、最初はアプリケーションインターフェイスポートで、もう1つは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 に答える