如何从端口列表中获取用户界面Com端口?
问题描述:
我正在开发一个C#.net应用程序,我在其中与USB 3G调制解调器Com端口进行通信以发送和接收消息。如何从端口列表中获取用户界面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();
}
像这样的事情应该工作,我没有测试它(不能测试它)。
+0
感谢SS'Kain'的答复,请你解释它是如何工作的,或者如果有任何代码示例,那么它更可期待 – hi0001234d 2012-08-08 17:24:05
我不能回答这个问题,但我很好奇,因为我从来没有听说过与UI端口关联的“UI”。 (可能只是我的无知。)你能告诉我这个吗?什么是UI端口? – David 2012-08-08 13:22:45
你是什么意思的UI端口?调制解调器的用户界面?还是你通过串口线连接到电脑?这是不是发展? – user957902 2012-08-08 13:24:12
好user957902我正在谈论GSM调制解调器的COm端口这个调制解调器与两个COM端口一起工作,一个用于与互联网数据传输的应用通信,另一个用于用户ibterface用于处理另一个GSM相关任务,例如SMS,呼叫等。 – hi0001234d 2012-08-08 17:23:36