我做的短信机程序,通过SerialPort类的DataReceived事件监听串口来收短信,但是只能收到70个汉字,还有下半段收不到,请大家指教!
解决方案 »
- datagridview搜索定位的问题!
- .net 2005运行出现以下错误
- 我要把一个文件夹拷贝到另一个目录文件夹下例如:D:\aa拷贝到D:\bb\下,即得到的D:\bb\aa !!!!
- 【谢谢】用过Developer Express .NET WinForm控件的进来一下
- 急!请问:如何在C#中连接EXCEL表?能不能给出例子?
- 第二次提问同一个问题.用户控件如何调用主窗体中的一个方法或者如何主动向主窗体传递一个数据?
- ListView转化为Excle文件问题? 急急急!!!!!!!!!!!!!!
- 怎样让嵌入toolstripcontainer的toolstrip能浮动?属性里怎么设不出这种效果呢?
- c#和ASP.NET的区别是什么,小弟刚学C#,哪一个好一点
- 多媒体文件的复制问题
- C#在控制台程序中定义事件,应该怎么样?我看得不明白。
- 新手问一个VS2008 使用面板上的一个小小问题!
对于你的监听程序,收到的也是一条一条的普通短信。然后自己组包成一条长短信,手机就是这么做的。
我不知道你是基于什么协议来监听,如果是AT COMMAND的话,可能组包要麻烦一些。
那么楼上你说的每条短信里的标志,要怎么加呢,是什么标志呢,发送的时候我可以根据字数来分条,然后加上标志,但是不知道要加什么标志,怎么实现?
请指教了,谢谢!
private void s_port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
ReceiveMessageEvent = new ReceiveMessageHandle(UpdateTextBox);
string response = string.Empty;
System.Threading.Thread.Sleep(500);
response = s_port.ReadExisting();
if (response.Length > 0 && response.IndexOf("+CMT:") != -1)
{
response = response.Replace("\r\n", "|");
int i = response.IndexOf("|");
if (i == 0)
i = 1;
else
i = 0;
i = response.IndexOf("|", i);
response = response.Remove(0, i);
response = response.Replace("|", "");
string SendPhoneNumber = string.Empty;
string SendContent = string.Empty;
DateTime SendTime = new DateTime();
PDUCoding.GSMCode code = new PDUCoding.GSMCode();
string SCA = "";
//DecodingMsg方法是解码的
if (pduc.DecodingMsg(response, ref SendPhoneNumber, ref SendContent, ref SendTime, ref code, ref SCA))
{
if (ReceiveMessageEvent != null)
{
// 通知处理事件 this.Invoke(ReceiveMessageEvent, new string[] { SendPhoneNumber.Trim(), SendTime.ToString().Trim(), SendContent.Trim() });
}
}
}
}
catch (Exception)
{
Close();
}
}
查过相关资料,有人说用do while循环,判断有否有OK,单步调试时看到读出来的数据如下:
"+CMGT:1,1,,121" "" "一长串的PDU"
因为超过70个汉字,这串PDU并没有结束,下面是
"PDU..."OK\r\n"+CMGT:1,1,,60" "" "这边是下一条短信了"
我要如何写能够把上面这句话拆开来,到OK前面的部分,取下来跟前一条短信连接,后面的部分是另一条短信!