我正在开发一个 C#.net 应用程序,在其中我与 USB 3G 调制解调器 Com 端口进行通信以发送和接收消息。
以下是我目前用于获取端口列表的代码:
string[] ports = SerialPort.GetPortNames();
现在我只想从端口列表中获取 UI 端口,例如,如果 3G 调制解调器有两个端口,例如 COM4 和 COM6,其中第一个是应用程序接口端口,另一个是 UI 端口。
如何以编程方式获取 UI 端口?
我正在开发一个 C#.net 应用程序,在其中我与 USB 3G 调制解调器 Com 端口进行通信以发送和接收消息。
以下是我目前用于获取端口列表的代码:
string[] ports = SerialPort.GetPortNames();
现在我只想从端口列表中获取 UI 端口,例如,如果 3G 调制解调器有两个端口,例如 COM4 和 COM6,其中第一个是应用程序接口端口,另一个是 UI 端口。
如何以编程方式获取 UI 端口?
串行端口不知道另一端连接的是什么。您需要尝试打开每一个并发送类似的内容"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();
}
像这样的东西应该可以工作,我没有测试它(无法测试它)。