0

我有一个连接到串行端口的 GSM 调制解调器,我使用它在某些事件时发送 SMS。

由于它不是即插即用的,我对如何检测它的连接状态感到困惑。Win API 之类的GetCommState显然行不通。

我可以定期发送数据包并检查数据是否正在被消耗,但我对轮询性能和阻塞可能正在使用的缓冲区的风险持谨慎态度。

那么,有没有其他方法,或者一些基于中断的东西,我可以用来检查是否仍然通过串行端口连接到我的系统?

对于这方面的任何帮助,我将不胜感激。

谢谢。

4

2 回答 2

0

串行端口是非常原始的通信设备,它们可以追溯到计算的早期。这就是您将 ASR-33 电传打字机插入以开始敲击您的 Fortran 程序的内容。他们仍然存在的唯一原因是因为他们很简单,硬件供应商喜欢他们,因为他们不必花钱开发和支持自定义 api 来使用他们的设备。

尽管如此,即使在 60 年代,计算机也需要确定是否连接了电传打字机。这是通过硬件握手信号完成的。DSR 信号(数据集就绪)在设备上电时打开。如果您使用 .NET SerialPort 类,则可以使用 SerialPort.DsrHolding 属性检查该信号。如果您使用 winapi,则使用 GetCommModemStatus()、MS_DSR_ON 标志。

那仍然只告诉您连接了某些设备。如果您想找出它是您编写程序的调制解调器,那么您可以使用AT 命令询问它,这是一种特定于调制解调器的协议。没有供应商以完全相同的方式实现这一点,但您通常可以依靠调制解调器使用 ATI 命令的标识。有关详细信息,请查看调制解调器的编程手册。

于 2013-04-04T12:23:20.177 回答
0

从 Windows 7 开始,使用Windows Mobile Broadband API获取有关 GSM 调制解调器的信息。

于 2013-04-04T10:08:59.647 回答