- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
单击按钮时,会向在 NumTxt 文本框中输入的号码发送短信,并发送在 SMSTxt 文本框中输入的文本。 texbox 中输入的端口名称 ComPort 这里是按钮点击事件的事件处理程序。
using System.IO.Ports;
private void button1_Click(object sender, EventArgs e)
{
try
{
int mSpeed = 1;
serialport.PortName = ComPort.Text;
serialport.BaudRate = 96000;
serialport.Parity = Parity.None;
serialport.DataBits = 8;
serialport.StopBits = StopBits.One;
serialport.Handshake = Handshake.XOnXOff;
serialport.DtrEnable = true;
serialport.RtsEnable = true;
serialport.NewLine = Environment.NewLine;
Console.WriteLine("1a");
try
{
serialport.Open();
}
catch (Exception)
{
MessageBox.Show("Try another Port." +
Environment.NewLine + "Phone not detected or The requested resource is in
use.", "CONNECTION ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Console.WriteLine("2a");
serialport.WriteLine("AT+CMGF=1" + Environment.NewLine);
System.Threading.Thread.Sleep(200);
serialport.WriteLine("AT+CSCS=GSM" + Environment.NewLine);
System.Threading.Thread.Sleep(200);
serialport.WriteLine("AT+CMGS=" + (char)34 + NumTxt.Text
+ (char)34 + Environment.NewLine);
System.Threading.Thread.Sleep(200);
serialport.WriteLine(SMSTxt.Text + (char)26);
System.Threading.Thread.Sleep(mSpeed);
serialport.Close();
}
catch (Exception)
{
if (serialport.IsOpen)
serialport.Close();
MessageBox.Show("Couldn't send the SMS.", "CONNECTION ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
我昨天能够使用这个代码发送短信,但我不知道为什么它不再起作用了。没有抛出异常。当我使用gsm调制解调器自带的软件时,我可以发送短信。但不是通过 C# 代码。如果有人能指出上面代码中的错误,我将不胜感激。
最佳答案
您应该永远、永远、永远使用 sleep 代替等待来自调制解调器的最终结果代码。正如您不会编写一个完全忽略来自 http 服务器的所有响应的 http 客户端一样,您也不应该将 AT 命令发送到调制解调器并完全忽略它发回的响应。您必须读取并解析调制解调器发回给您的所有内容。没有其他方法可以可靠地工作。
我的建议是您首先获取 V.250 standard 的副本并至少阅读第 5 章的全部内容。该标准是 AT 命令处理的圣经,将教会您大量有关 AT 命令处理的知识。例如,使用 WriteLine
和/或 Environment.NewLine
是错误的; AT 命令行应该单独以 \r
结束,没有其他任何内容。
只是为了强调该文件的重要性:即使在爱立信的手机中实现 AT 命令十多年后,我和我的同事仍然 consulted that standard regularly .
事实上,现在停止阅读此答案,download该文档,请阅读第 5 章的全部内容,然后再返回阅读其余部分。
对于发送您不特别关心响应的命令1,唯一可靠的方法是做类似的事情
serialport.Open();
...
// start sending AT+CMGF=1
serialport.Write("AT+CMGF=1\r");
do {
line = readLine(serialport);
} while (! is_final_result_code(line))
// Sending of AT+CMGF=1 command finished (successfully or not)
...
serialport.Close();
readLine
函数从串行端口读取一个字节,直到它收到以 \r\n
结尾的完整行,然后返回该行。
您可以查看 atinout 的代码对于 is_final_result_code
函数的示例(您还可以与 ST-Ericsson's U300 RIL 中的 isFinalResponseError
和 isFinalResponseSuccess
2 进行比较) .
AT+CMGS 命令必须以不同方式处理。在发送有效负载之前,您必须等待来自调制解调器的 "\r\n> "
响应,请参阅 this answer 的第一部分了解详情。
1 尽管您很可能应该关心命令是否成功执行。参见 this answer以现实的方式发送命令行并解析响应行。
2 请注意,CONNECT
不是最终结果代码,它是中间结果代码,因此名称 isFinalResponseSuccess 严格来说并不是 100% 正确。
关于c# - 无法使用 System.IO.Ports 使用 gsm 调制解调器通过 C# 代码发送 SMS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33234810/
我正在尝试使用 USB 调制解调器发送短信(我有一个 D-Link USB 调制解调器)。我刚找到 SmsLib,但我不知道如何使用 USB 调制解调器。我找到的例子是串行调制解调器,我没有找到任何
我想知道有多少电话或系统连接到我的调制解调器?我尝试扫描从 1 到 254 的 IP 以发现连接的设备。但是当我尝试 InetAddress.isreachable(2000) 它在我的手机上工作但在
我安装了 Hyperterminal 并使用了我的 samsung galaxy s3 并使用 usb 数据线将它连接到我的笔记本电脑。我安装了驱动程序,计算机将 s3 检测为调制解调器。它在 sup
我想从 C# Windows 应用程序对我的 NETGEAR DGN2200 进行热重置,我的调制解调器是标准的 Netgear 调制解调器/路由器。不用telnet可以吗? 最佳答案 我希望这段代码
是否可以将 Android 移动设备用作 GSM 调制解调器? 多年来,我一直在使用 GSM 调制解调器。我正在 .net 下开发应用程序来调用数据电话、发送/接收短信等等,到目前为止我使用的是普通的
我希望我的 Android 能够作为 GSM 调制解调器工作,或者通过任何其他方式,特别是使用某些编程语言库通过它发送短信。以编程方式以及配置/安装等方式执行此操作的方法是什么? 最佳答案 1) 了解
我正在编写一个从 GSM 调制解调器(中兴通讯公司)接收短消息 (SMS) 的应用程序(+CMTI 通知) . 我已经完成了我的程序,但是当有一个多部分 SMS 时,我无法将它们相互连接,并且它们都以
我想与 gsm 调制解调器建立联系。我的第一个目标也是主要目标是发送和接收短信。然后我想走在前面。例如用于彩信发送和...我想在linux服务器上做。请向我介绍一个合适的模块及其教程或文档。谢谢您指导
尝试在 Linux 上使用 USB 调制解调器开发应用程序。使用具有 CNMI=1,1,0,1,0 设置的华为 E220(也尝试了其他 CNMI 设置均无效)并在接收到的消息上获取新消息指示以串行接收
任何人都可以告诉我,是否有任何可以检测当前运营商名称的AT命令? 我用过AT+COPS? 它返回给我运算符(operator)的数字代码:0,2,40410 然后我使用命令 AT+WOPN = 0,4
我正在为基于 AT 命令的调制解调器编写驱动程序。这是数据表 http://www.cermetek.com/Catalog/High-Speed-Modems/DataSheet/CH1794_60
我正在尝试制作一个发送短信的程序。我编写了程序,但没有成功发送消息。我的程序向计算机中的端口 COM 发送一个 At 命令,但我的 gsm 调制解调器没有得到响应。我正在使用 COM 终端(Temp
我想与我的 DFM-562IS D-Link 沟通使用 Java 的调制解调器(通过 PCI 插槽连接到我的计算机主板)。目标是监听来电并接收用户在连接后在另一端输入的代码(通过他/她的手机键盘)。
我有一个 GSM 调制解调器,它有一个与之关联的特定命令集。我想使用我的 c# 代码调用这些命令。可以这样做吗? GSM调制解调器型号:MOD 9001 BENQ GSM/GPRS调制解调器 我没有任
我想像开机重启一样重启 USB 调制解调器,而无需重启并在 Linux 机器中物理拔掉它。我试过执行此程序: echo -n 0 >/sys/devices/platform/omap/ti81xx-
我决定为我的 Linux 机器(Vmware 上的 OpenSuse 12.1 64 位)安装一个 GSM 调制解调器,这样我就可以将它用作 SMS 网关。我有一个提供 USB 接口(interfac
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 3 年前。
我正在尝试在 windows-7 上制作一个简单的 java 应用程序,它可以在我的 citycell Zoom USB 调制解调器上发送 SMS。我使用 AT 命令(http://www.canar
我们在全局部署了一个客户端软件,它使用模拟电话线和 56K 调制解调器连接到用于上传数据的后端软件(后端服务器有多个模拟调制解调器卡)。这是一个封闭的系统,我们实现了自己的协议(protocol),还
我购买了中兴MF190 USB调制解调器并开始使用它。 到目前为止,我已经成功使用 TurboPowers 的免费 AsyncPro 组件以编程方式将短信发送到另一台移动设备。 我想知道是否有一种方法
我是一名优秀的程序员,十分优秀!