当前位置:编程学习 > C#/ASP.NET >>

C# SerialPort 连续发送短信,报“操作已超时”,在线等

               //注销事件关联,为发送做准备
                sp.DataReceived -= sp_DataReceived;
                sp.WriteLine("AT+CMGS=" + len.ToString());
                sp.ReadTo(">");//第一条发送正常,第二条发送短信,这个位置,报“操作已超时”
                sp.DiscardInBuffer();       
                Stopwatch sw = new Stopwatch();
                TimeSpan ts = new TimeSpan(0, 0, 3);
                sw.Start();//计时开始
                sp.WriteLine(temp + (char)(26)); //26 Ctrl+Z ascii码               
                while (true)
                {
                    if (sp.ReadExisting() == "OK")
                    {
                        break;
                    }
                    if (sw.Elapsed > ts)//如果3秒内,无法得到信息,则跳出循环
                    {
                        break;
                    }
                }
                //事件重新绑定 正常监视串口数据  
                sp.DataReceived += sp_DataReceived;


我根据网上搜到的实例,根据自己的理解修改的
有几个疑问,1.为什么网上的实例发送指令之后,都要Sleep一下呢?有没有其他方式?
2.如何判断发送短信成功,如果对方关机等情况,我接收不到短信发送成功,怎么办?
3.如何判断,我可以再次发送短信?
4.如何高效率的发送短信,只负责发送短信!
5.不正常关闭的程序的情况,无法再次连接短信猫,如何处理,报COM1无法访问,我现在处理方式就是拔掉短信猫电源,然后重新程序 - -!
6.最重要的问题:我发送短信第一条发送正常,第二条发送短信,报“操作已超时”,以此类推,
跪求大神 --------------------编程问答-------------------- --------------------编程问答-------------------- 跪求大神 --------------------编程问答-------------------- SerialPort 串口可以发短信吗?不明觉厉~ --------------------编程问答-------------------- 有几个疑问,
1.为什么网上的实例发送指令之后,都要Sleep一下呢?有没有其他方式?

你不sleep,数据还没处理玩,你又来,怎会不报错?
给设备一点时间。

2.如何判断发送短信成功,如果对方关机等情况,我接收不到短信发送成功,怎么办?

你只管发送成功,人家是否关机不是你发送过程中该考虑的问题。

3.如何判断,我可以再次发送短信?

发送成功了,短信猫有状态标示的。

4.如何高效率的发送短信,只负责发送短信!

没什么高效率的,具体效率看你的设备能力。


5.不正常关闭的程序的情况,无法再次连接短信猫,如何处理,报COM1无法访问,我现在处理方式就是拔掉短信猫电源,然后重新程序 - -!

你在退出程序的时候要关闭端口就好了。我当时好像也是拔掉重新连接。

6.最重要的问题:我发送短信第一条发送正常,第二条发送短信,报“操作已超时”,以此类推,

等他发送成功后你再发第二条,应该不会。

再多说句,其实短信猫是被禁用的。如果一分钟内超过30条还是多少短信, 这个号就会被禁用短消息功能。这个我问过移动。
--------------------编程问答--------------------
引用 4 楼 machong8183 的回复:
有几个疑问,
1.为什么网上的实例发送指令之后,都要Sleep一下呢?有没有其他方式?

你不sleep,数据还没处理玩,你又来,怎会不报错?
给设备一点时间。

2.如何判断发送短信成功,如果对方关机等情况,我接收不到短信发送成功,怎么办?

你只管发送成功,人家是否关机不是你发送过程中该考虑的问题。

3.如何判断,我可以再次发送短信?

发送成功了,短信猫有状态标示的。

4.如何高效率的发送短信,只负责发送短信!

没什么高效率的,具体效率看你的设备能力。


5.不正常关闭的程序的情况,无法再次连接短信猫,如何处理,报COM1无法访问,我现在处理方式就是拔掉短信猫电源,然后重新程序 - -!

你在退出程序的时候要关闭端口就好了。我当时好像也是拔掉重新连接。

6.最重要的问题:我发送短信第一条发送正常,第二条发送短信,报“操作已超时”,以此类推,

等他发送成功后你再发第二条,应该不会。

再多说句,其实短信猫是被禁用的。如果一分钟内超过30条还是多少短信, 这个号就会被禁用短消息功能。这个我问过移动。
--------------------编程问答--------------------
引用 4 楼 machong8183 的回复:
有几个疑问,
1.为什么网上的实例发送指令之后,都要Sleep一下呢?有没有其他方式?

你不sleep,数据还没处理玩,你又来,怎会不报错?
给设备一点时间。

2.如何判断发送短信成功,如果对方关机等情况,我接收不到短信发送成功,怎么办?

你只管发送成功,人家是否关机不是你发送过程中该考虑的问题。

3.如何判断,我可以再次发送短信?

发送成功了,短信猫有状态标示的。

4.如何高效率的发送短信,只负责发送短信!

没什么高效率的,具体效率看你的设备能力。


5.不正常关闭的程序的情况,无法再次连接短信猫,如何处理,报COM1无法访问,我现在处理方式就是拔掉短信猫电源,然后重新程序 - -!

你在退出程序的时候要关闭端口就好了。我当时好像也是拔掉重新连接。

6.最重要的问题:我发送短信第一条发送正常,第二条发送短信,报“操作已超时”,以此类推,

等他发送成功后你再发第二条,应该不会。

再多说句,其实短信猫是被禁用的。如果一分钟内超过30条还是多少短信, 这个号就会被禁用短消息功能。这个我问过移动。


感谢4L,我发现执行不同的指令,好像等待的时间,就不会相同!那么如何确定这个等待时间?例如发送短信这个指令,大约需要多少?是固定的吗?如果是不确定的,如何控制? --------------------编程问答-------------------- 有返回值的啊,你看返回来没有就知道了 --------------------编程问答-------------------- 不知道短信猫是咋回事,但超时那里sp.ReadTo(">");如果缓冲区没有">",并且设置了超时属性,是会报超时错误的 --------------------编程问答--------------------   '******************************************************
    'Sms_Send函数说明如下:
    '功能描述:发送短信
    'Sms_TelNum:发送给的移动电话号码
    'Sms_Text:发送的短信内容
    'Sms_Connection:返回值(0:发送短信失败;1:发送短信成功)
    '****************************************************** --------------------编程问答--------------------
引用 8 楼 leafmao 的回复:
不知道短信猫是咋回事,但超时那里sp.ReadTo(">");如果缓冲区没有">",并且设置了超时属性,是会报超时错误的


现在我唯一的疑问就是,我发送第二条短信的时候,会报超时,我设置的超时时间是3秒,如果不设置超时时间,就会死在那,我写了个很笨的解决方案,就是我发送指令的时候,如果报错,就再次发送,如果连续3次,都报错,则跳出循环,继续下一条短信的发送!以此类推!虽然这样解决了,我发送短信的报错的问题,但是太慢了,除了我第一条短信发送的很快,其他短信差不多5秒一条短信!

有没有提高效率的解决方法?只要我第二次之后发送sp.WriteLine("AT+CMGS=" + len.ToString());这个指令的时候,不让报错就可以! --------------------编程问答-------------------- 我发现了,你还在下AT command,没有用dll --------------------编程问答-------------------- 基本上是3秒发一条短信
你要是下AT command,还要去读com口回来的值
其实现在短信猫有打包好的dll都能用的 --------------------编程问答-------------------- 首先你得明白sp.ReadTo(">")的意思是什么,是从缓冲区读取数据,一直到">"字符,但如果缓冲区里没有这个字符,就会一直等,而到了指定的超时时间还没读到那个字符,就会超时。解决办法么,你换个读取办法好啦,干嘛一定要读到">"字符为止呢? --------------------编程问答--------------------
引用 12 楼 machong8183 的回复:
基本上是3秒发一条短信
你要是下AT command,还要去读com口回来的值
其实现在短信猫有打包好的dll都能用的

求个DLL下载连接 --------------------编程问答--------------------
引用 13 楼 leafmao 的回复:
首先你得明白sp.ReadTo(">")的意思是什么,是从缓冲区读取数据,一直到">"字符,但如果缓冲区里没有这个字符,就会一直等,而到了指定的超时时间还没读到那个字符,就会超时。解决办法么,你换个读取办法好啦,干嘛一定要读到">"字符为止呢?

我明白这句代码的意思,我不明白的是,为什么写这个例子的人,非要这么写,而我又没有其他方法而且对AT指令不怎么了解,所以只能按这个逻辑完善!
我现在的主要问题就是,我因为这个位置ReadTo的问题,导致,第二次连续发送短信过慢!如果有其他方法,当然更好! 
--------------------编程问答--------------------
引用 15 楼 bjf814 的回复:
Quote: 引用 13 楼 leafmao 的回复:

首先你得明白sp.ReadTo(">")的意思是什么,是从缓冲区读取数据,一直到">"字符,但如果缓冲区里没有这个字符,就会一直等,而到了指定的超时时间还没读到那个字符,就会超时。解决办法么,你换个读取办法好啦,干嘛一定要读到">"字符为止呢?

我明白这句代码的意思,我不明白的是,为什么写这个例子的人,非要这么写,而我又没有其他方法而且对AT指令不怎么了解,所以只能按这个逻辑完善!
我现在的主要问题就是,我因为这个位置ReadTo的问题,导致,第二次连续发送短信过慢!如果有其他方法,当然更好! 


既然认为例子这样写一定没问题,那就加个try...catch吧,catch超时的异常,但是不做处理,直接发送第二次 --------------------编程问答--------------------
引用 14 楼 bjf814 的回复:
Quote: 引用 12 楼 machong8183 的回复:

基本上是3秒发一条短信
你要是下AT command,还要去读com口回来的值
其实现在短信猫有打包好的dll都能用的

求个DLL下载连接


加我qq,或者关注我,我给你 --------------------编程问答--------------------
引用 3 楼 danding_ge 的回复:
SerialPort 串口可以发短信吗?不明觉厉~

给你涨哈姿势··
短信猫听说过没? --------------------编程问答--------------------
引用 18 楼 yuekunge 的回复:
Quote: 引用 3 楼 danding_ge 的回复:

SerialPort 串口可以发短信吗?不明觉厉~

给你涨哈姿势··
短信猫听说过没?
--------------------编程问答-------------------- "除了我第一条短信发送的很快,其他短信差不多5秒一条短信!"

如果你不是专门向移动申请的短信批发(收费),或者使用移动的接口发送短信(收费),那么5秒一条短信(现在的情况下)已经不错了.

--------------------编程问答-------------------- 你发太快,机器受不鸟了。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,