zoukankan      html  css  js  c++  java
  • W3100SMS 短信猫代码发送 上

    万维盈创W3100SM-S短信猫使用说明书,打开包装盒,这是网口的,带根网线,GSM天线,有张光盘,光盘里有这么个软件,如下图:

    W3100SM-S

    默认IP地址是:192.168.1.24,端口:1234。但这不是我想要的,我要用程序调用接口,或是DLL,或是协议发送。打电话给客服务。

    客服MM告诉我:哥,咱们这款不支持接口的。

    我:哦。

    找技术,技术可以的,把协议发给我,等了好久邮箱里都没有收到,什么情况,然后在垃圾邮件中找到了。

    短信发送格式
    
    输入:    01113910013712你好abc。
    
    意义:    0:数据类型为发送短信
    
    11:对方号码长度为11位。
    
    13910013712:对方号码。
    
    你好abc:要发送的短信内容。
    
    
    
    
    短信接收格式
    
    输出:    01386135210003291404013113162432你好abc。
    
    意义:    0:数据类型为收到短信,后面为短信相关内容。
    
    13:发送方号码长度为13位。
    
            8613521000329:发送方号码。
    
            14:时间戳长度。
    
            04013113162432:时间戳,表示发送时间为04年01月31日13点16分24秒,时区是32。
    
            你好abc:收到的短信内容。
    
    接收格式例子(十六进制):
    
    30 00 31 00 33 00 38 00 36 00 31 00 35 00 39 00 31 00 31 00 30 00 37 00 30 00 33 00 38 00 32 00 31 
    
    00 34 00 31 00 33 00 30 00 31 00 32 00 34 00 31 00 31 00 32 00 38 00 33 00 34 00 33 00 32 00 31 00 
    
    32 00 33 00 61 00 62 00 63 00 60 4F 7D 59 
    
    接收报文:123abc你好(unicode编码格式为两个字节表示,如果为汉字,本身就是两个字节表示,如果是数字及字幕,则在转化为十六进制后用00补全两个字节)

    告诉我要用十六进制发送,我问没有DEMO,我是个懒人呀,有DEMO可以省事不少。回答我没有,那好吧!我用TCP调试助手发,选择上十六进制,然后发送,很可惜,不成功,返回个4,手机也没有收到段信,当然这不是我的手机号,在这里我只是用了协议里的。

    W3100SM-S2

    然后再问技术,技术说发送的时候也要如下这般(unicode编码格式为两个字节表示,如果为汉字,本身就是两个字节表示,如果是数字及字幕,则在转化为十六进制后用00补全两个字节),好吧,我服了,我做了一个很艰难的决定,自己搞定吧,不提供DEMO,自己动手丰衣足食。

    /// <summary>
            /// 短信unicode编码格式转换
            /// </summary>
            /// <param name="srcText"></param>
            /// <returns></returns>
            private string StringToUnicodeMode(string srcText)
            {
                string dst = "";
                char[] src = srcText.ToCharArray();
                for (int i = 0; i < src.Length; i++)
                {
                    byte[] bytes = Encoding.Unicode.GetBytes(src[i].ToString());
                    string str =  bytes[0].ToString("X2") +" "+ bytes[1].ToString("X2");
                    dst += str+" ";
                }
                return dst.TrimEnd(' ');
            }
    
            /// <summary>
            /// 收取到的编码转短信
            /// </summary>
            /// <param name="srcText"></param>
            /// <returns></returns>
            private string UnicodeToStringMode(string srcText)
            {
                string dst = "";
                string src = srcText.Replace(" ","");
                int len = src.Length / 4;
    
                for (int i = 0; i <= len-1; i++)
                {
                    string str = "";
                    str = src.Substring(0, 4);
                    src = src.Substring(4);
                    byte[] bytes = new byte[2];
                    bytes[0] = byte.Parse(int.Parse(str.Substring(0, 2), NumberStyles.HexNumber).ToString());
                    bytes[1] = byte.Parse(int.Parse(str.Substring(2, 2), NumberStyles.HexNumber).ToString());
                    dst += Encoding.Unicode.GetString(bytes);
                }
                return dst;
            }

    这两种转换代码只适合在此使用,在别的地方用是不对的,正常的是不够两个字节在前面,这个是在后面补全的,所以在反过来转换的时候也要把顺序反过来。

    W3100SM-S4

    这是按照协议的格式编码的,可以复制到剪切板,然后粘贴到TCP调试助手里,然后选中十六进制发送,一定要改成自己的手机码,要不你是收不到的,小心人家告你骚扰!

    代码下载

  • 相关阅读:
    设计模式之模板方法
    UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
    JAVA并行框架学习之ForkJoin
    生产环境上shell的解读
    设计模式之中介者模式
    设计模式之策略模式
    设计模式之状态模式
    深入理解动态代理
    深入理解Java虚拟机
    深入理解Java虚拟机
  • 原文地址:https://www.cnblogs.com/wk986/p/2965252.html
Copyright © 2011-2022 走看看