看标题吓一跳,什么样的牛人才能发5000~10000分的帖啊!
原来楼主是说RMB

解决方案 »

  1.   

    给你个思路,用c# 写个web services 就可以了
      

  2.   

    CP、SP之间只需为对方提供一个页面调用就可。发送信息:CP调用SP的页面,接收信息SP调用CP的页面。只做过手机短信的,不知彩信的有什么不同。
      

  3.   

    Mancinigt:"给你个思路,用c# 写个web services 就可以了"大的思路我也有,不如这样吧:
    如果不是太复杂,您帮我写个Demo,成了我们3、7开,你拿7?或者,你直接解了这个题,全部拿下?
      

  4.   

    dk385,大康:看来你是有经验的。完全一样,只不过彩信的内容(数据)比短信大一点。包在xml中就是了。部分协议:
    调用方法:
    POST如下格式的XML到接口地址。<?xml version="1.0" encoding="utf-8" ?>
    <data>
    <user><!--合作方代码(CP,字符串)--></user>
    <mobile><!--手机号码(11位数字)--></mobile>
    <seq><!--点播流水号(整数1-10位)--></seq>
    <result><!--点播结果代码(1位数字,默认0 )--></result>
    <!--
    0 正常(此时下发点播内容,否则不下发)
    2 手机号错误
    3 无效点播指令
    4 无对应点播内容
    9 其他错误
    -->
    <title><!--彩信标题(字符串,可为空,长度限制70个字)--></title>
    <mms><!--彩信多媒体内容(Base64编码)--></mms>
    <fee><!--资费标记( 0 免费 /  1 收费-默认 )--></fee>
    <time><!--时间戳:格式YmdHis (20080401152329)--></time>
    <auth><!--32位MD5加密验证串--></auth>
    <!--
    auth = md5( 合作方代码 + 手机号 + 流水号 + 点播结果 + 彩信标题 + 多媒体内容长度(字节)+ 资费标记 + 回调接口 + 时间戳 + 密钥 )
    auth = md5( user + mobile + seq + result + title + length(mms) + fee + time + 密钥 )
    -->
    </data>接口返回结果:XML格式:
     若参数 back(回调接口)有效,则通过跳转回调接口返回结果。
     若参数 back无效(为空),直接输出以下XML格式的结果。
    <?xml version="1.0" encoding="utf-8" ?>
    <data>
    <error>错误代码(0表示正常处理)</error>
    <time>时间戳:格式YmdHis (20080401152329)</time>
    </data>
      

  5.   

    找一个抓包工具,了解全部收发信息
    利用httpWetRequest , httpWebResponse 实现
      

  6.   

    看来,论坛的一分显然是比一分RMB的价值高多了。难道,就没有人做过类似的软件? 给个解这么难啊
      

  7.   

    [转载1]
    namespace Microshaoft 

     using System; 
     using System.Net.Sockets;  public class Util 
     { 
      private static object _SyncLockObject = new object();   public static string Get_MMDDHHMMSS_String(DateTime dt) 
      { 
       string s = dt.Month.ToString().PadLeft(2, '0'); 
       s += dt.Day.ToString().PadLeft(2, '0'); 
       s += dt.Hour.ToString().PadLeft(2, '0'); 
       s += dt.Minute.ToString().PadLeft(2, '0'); 
       s += dt.Second.ToString().PadLeft(2, '0'); 
       return s; 
      }   public static string Get_YYYYMMDD_String(DateTime dt) 
      { 
       string s = dt.Year.ToString().PadLeft(4, '0'); 
       s += dt.Month.ToString().PadLeft(2, '0'); 
       s += dt.Day.ToString().PadLeft(2, '0'); 
       return s; 
      }   internal static void WriteToStream(byte[] bytes, NetworkStream Stream) 
      { 
       if (Stream.CanWrite) 
       { 
        lock (_SyncLockObject) 
        { 
         Stream.Write(bytes, 0, bytes.Length); 
        } 
       } 
      }   internal static byte[] ReadFromStream(int Length, NetworkStream Stream) 
      { 
       byte[] bytes = null; 
       if (Stream.CanRead) 
       { 
        if (Stream.DataAvailable) 
        { 
         bytes = new byte[Length]; 
         int r = 0; 
         int l = 0; 
         lock (_SyncLockObject) 
         { 
          while (l < Length) 
          { 
           r = Stream.Read(bytes, l, Length - l); 
           l += r; 
          } 
         } 
        } 
       } 
       return bytes; 
      } 
     } 
    } //CMPP 消息定义 
    namespace Microshaoft.CMPP.Messages 

     using System; 
     using System.Text; 
     using System.Security.Cryptography;  public enum CMPP_Command_Id : uint 
     { 
      CMPP_CONNECT = 0x00000001 //请求连接 
      ,CMPP_CONNECT_RESP = 0x80000001 //请求连接应答 
      ,CMPP_TERMINATE = 0x00000002 //终止连接 
      ,CMPP_TERMINATE_RESP = 0x80000002 //终止连接应答 
      ,CMPP_SUBMIT = 0x00000004 //提交短信 
      ,CMPP_SUBMIT_RESP = 0x80000004 //提交短信应答 
      ,CMPP_DELIVER = 0x00000005 //短信下发 
      ,CMPP_DELIVER_RESP = 0x80000005 //下发短信应答 
      ,CMPP_QUERY = 0x00000006 //发送短信状态查询 
      ,CMPP_QUERY_RESP = 0x80000006 //发送短信状态查询应答 
      ,CMPP_CANCEL = 0x00000007 //删除短信 
      ,CMPP_CANCEL_RESP = 0x80000007 //删除短信应答 
      ,CMPP_ACTIVE_TEST = 0x00000008 //激活测试 
      ,CMPP_ACTIVE_TEST_RESP = 0x80000008 //激活测试应答 
      ,CMPP_FWD = 0x00000009 //消息前转 
      ,CMPP_FWD_RESP = 0x80000009 //消息前转应答 
      ,CMPP_MT_ROUTE = 0x00000010 //MT路由请求 
      ,CMPP_MT_ROUTE_RESP = 0x80000010 //MT路由请求应答 
      ,CMPP_MO_ROUTE = 0x00000011 //MO路由请求 
      ,CMPP_MO_ROUTE_RESP = 0x80000011 //MO路由请求应答 
      ,CMPP_GET_MT_ROUTE = 0x00000012 //获取MT路由请求 
      ,CMPP_GET_MT_ROUTE_RESP = 0x80000012 //获取MT路由请求应答 
      ,CMPP_MT_ROUTE_UPDATE = 0x00000013 //MT路由更新 
      ,CMPP_MT_ROUTE_UPDATE_RESP = 0x80000013 //MT路由更新应答 
      ,CMPP_MO_ROUTE_UPDATE = 0x00000014 //MO路由更新 
      ,CMPP_MO_ROUTE_UPDATE_RESP = 0x80000014 //MO路由更新应答 
      ,CMPP_PUSH_MT_ROUTE_UPDATE = 0x00000015 //MT路由更新 
      ,CMPP_PUSH_MT_ROUTE_UPDATE_RESP = 0x80000015 //MT路由更新应答 
      ,CMPP_PUSH_MO_ROUTE_UPDATE = 0x00000016 //MO路由更新 
      ,CMPP_PUSH_MO_ROUTE_UPDATE_RESP = 0x80000016 //MO路由更新应答 
      ,CMPP_GET_MO_ROUTE = 0x00000017 //获取MO路由请求 
      ,CMPP_GET_MO_ROUTE_RESP = 0x80000017 //获取MO路由请求应答 
     }  public class MessageHeader //消息头 
     { 
      public const int Length = 4 + 4 + 4; 
      //private byte[] _bytes = new byte[MessageHeader.Length]; 
      public CMPP_Command_Id Command_Id 
      { 
       get 
       { 
        return this._Command_Id; 
       } 
      }   public uint Sequence_Id 
      { 
       get 
       { 
        return this._Sequence_Id; 
       } 
      }   public uint Total_Length 
      { 
       get 
       { 
        return this._Total_Length; 
       } 
      } 
      

  8.   

      [续]
    private uint _Total_Length; // 4 Unsigned Integer 消息总长度(含消息头及消息体) 
      private CMPP_Command_Id _Command_Id; // 4 Unsigned Integer 命令或响应类型 
      private uint _Sequence_Id; // 4 Unsigned Integer 消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)   public MessageHeader(uint Total_Length, CMPP_Command_Id Command_Id, uint Sequence_Id) //发送前 
      { 
       this._Total_Length = Total_Length; 
       this._Command_Id = Command_Id; 
       this._Sequence_Id = Sequence_Id; 
      }   public MessageHeader(byte[] bytes) 
      { 
       byte[] buffer = new byte[4]; 
       Buffer.BlockCopy(bytes, 0, buffer, 0, buffer.Length); 
       Array.Reverse(buffer); 
       this._Total_Length = BitConverter.ToUInt32(buffer, 0);    Buffer.BlockCopy(bytes, 4, buffer, 0, buffer.Length); 
       Array.Reverse(buffer); 
       this._Command_Id = (CMPP_Command_Id) BitConverter.ToUInt32(buffer, 0);    Buffer.BlockCopy(bytes, 8, buffer, 0, buffer.Length); 
       Array.Reverse(buffer); 
       this._Sequence_Id = BitConverter.ToUInt32(buffer, 0); 
      } 
      public byte[] ToBytes() 
      { 
       byte[] bytes = new byte[MessageHeader.Length];    byte[] buffer = BitConverter.GetBytes(this._Total_Length); 
       Array.Reverse(buffer); 
       Buffer.BlockCopy(buffer, 0, bytes, 0, 4);    buffer = BitConverter.GetBytes((uint) this._Command_Id); 
       Array.Reverse(buffer); 
       Buffer.BlockCopy(buffer, 0, bytes, 4, 4);    buffer = BitConverter.GetBytes(this._Sequence_Id); 
       Array.Reverse(buffer); 
       Buffer.BlockCopy(buffer, 0, bytes, 8, 4);    return bytes; 
      } 
     }  public class CMPP_CONNECT //: CMPP_Request 
     { 
      public const int BodyLength = 6 + 16 + 1 + 4;   private string _Source_Addr; // 6 Octet String 源地址,此处为SP_Id,即SP的企业代码。 
      private string _Password; 
      private byte[] _AuthenticatorSource; // 16 Octet String 用于鉴别源地址。其值通过单向MD5 hash计算得出,表示如下: 
      //   AuthenticatorSource = 
      //   MD5(Source_Addr+9 字节的0 +shared secret+timestamp) 
      //   Shared secret 由中国移动与源地址实体事先商定,timestamp格式为:MMDDHHMMSS,即月日时分秒,10位。 
      private uint _Version; // 1 Unsigned Integer 双方协商的版本号(高位4bit表示主版本号,低位4bit表示次版本号),对于3.0的版本,高4bit为3,低4位为0 
      private uint _Timestamp; // 4 Unsigned Integer 时间戳的明文,由客户端产生,格式为MMDDHHMMSS,即月日时分秒,10位数字的整型,右对齐 。   private MessageHeader _Header;  public MessageHeader Header 
      { 
       get 
       { 
        return this._Header; 
       } 
      }   public byte[] AuthenticatorSource 
      { 
       get 
       { 
        return this._AuthenticatorSource; 
       } 
      }   public CMPP_CONNECT(string Source_Addr, string Password, DateTime Timestamp, uint Version, uint Sequence_Id) 
      { 
       this._Header = new MessageHeader(MessageHeader.Length + BodyLength, CMPP_Command_Id.CMPP_CONNECT, Sequence_Id);    this._Source_Addr = Source_Addr; 
       this._Password = Password;    string s = Util.Get_MMDDHHMMSS_String(Timestamp); 
       this._Timestamp = UInt32.Parse(s);    byte[] buffer = new byte[6 + 9 + this._Password.Length + 10]; 
       Encoding.ASCII.GetBytes(this._Source_Addr).CopyTo(buffer, 0); 
       Encoding.ASCII.GetBytes(this._Password).CopyTo(buffer, 6 + 9); 
       Encoding.ASCII.GetBytes(s).CopyTo(buffer, 6 + 9 + this._Password.Length); 
       this._AuthenticatorSource = new MD5CryptoServiceProvider().ComputeHash(buffer, 0, buffer.Length);    this._Version = Version; 
      }   public byte[] ToBytes() 
      { 
       byte[] bytes = new byte[MessageHeader.Length + BodyLength]; 
       int i = 0;    //header 12 
       byte[] buffer = this._Header.ToBytes(); 
       Buffer.BlockCopy(buffer, 0, bytes, 0, buffer.Length);    //Source_Addr 6 
       i += MessageHeader.Length; 
       buffer = Encoding.ASCII.GetBytes(this._Source_Addr); 
       Buffer.BlockCopy(buffer, 0, bytes, i, 6);    //AuthenticatorSource 16 
       i += 6; 
       buffer = this._AuthenticatorSource; 
       Buffer.BlockCopy(buffer, 0, bytes, i, buffer.Length); //16    //version 1 
       i += 16; 
       bytes[i++] = (byte) this._Version; //版本    //Timestamp 
       buffer = BitConverter.GetBytes(this._Timestamp); 
       Array.Reverse(buffer); 
       buffer.CopyTo(bytes, i); 
       return (bytes); 
      } 
     } 
      

  9.   

    [续]
    public class CMPP_CONNECT_RESP //: CMPP_Response 
     { 
      private MessageHeader _Header; 
      public const int BodyLength = 4 + 16 + 1;   private uint _Status; // 4 Unsigned Integer 状态 
      //   0:正确 
      //   1:消息结构错 
      //   2:非法源地址 
      //   3:认证错 
      //   4:版本太高 
      //   5~:其他错误 
      private byte[] _AuthenticatorISMG; // 16 Octet String ISMG认证码,用于鉴别ISMG。 
      //   其值通过单向MD5 hash计算得出,表示如下: 
      //   AuthenticatorISMG =MD5(Status+AuthenticatorSource+shared secret),Shared secret 由中国移动与源地址实体事先商定,AuthenticatorSource为源地址实体发送给ISMG的对应消息CMPP_Connect中的值。 
      //    认证出错时,此项为空。 
      private uint _Version; // 1 Unsigned Integer 服务器支持的最高版本号,对于3.0的版本,高4bit为3,低4位为0   public byte[] AuthenticatorISMG 
      { 
       get 
       { 
        return this._AuthenticatorISMG; 
       } 
      }   public uint Status 
      { 
       get 
       { 
        return this._Status; 
       } 
      }   public uint Version 
      { 
       get 
       { 
        return this._Version; 
       } 
      }   public MessageHeader Header 
      { 
       get 
       { 
        return this._Header; 
       } 
      }   public CMPP_CONNECT_RESP(byte[] bytes) 
      { 
       //header 12 
       int i = 0; 
       byte[] buffer = new byte[MessageHeader.Length]; 
       Buffer.BlockCopy(bytes, 0, buffer, 0, buffer.Length); 
       this._Header = new MessageHeader(buffer);    //status 4 
       i += MessageHeader.Length; 
       buffer = new byte[4]; 
       Buffer.BlockCopy(bytes, i, buffer, 0, buffer.Length); 
       Array.Reverse(buffer); 
       this._Status = BitConverter.ToUInt32(buffer, 0);    //AuthenticatorISMG 16 
       i += 4; 
       this._AuthenticatorISMG = new byte[16]; 
       Buffer.BlockCopy(bytes, MessageHeader.Length + 4, this._AuthenticatorISMG, 0, this._AuthenticatorISMG.Length);    //version 
       i += 16; 
       this._Version = bytes[i]; 
      } 
     }  public class CMPP_SUBMIT //: CMPP_Request 
     { 
      private int _BodyLength; 
      //without _Dest_terminal_Id Msg_Content 
      public const int FixedBodyLength = 8 
       + 1 
       + 1 
       + 1 
       + 1 
       + 10 
       + 1 
       + 32 
       + 1 
       + 1 
       + 1 
       + 1 
       + 6 
       + 2 
       + 6 
       + 17 
       + 17 
       + 21 
       + 1 
       //+ 32*DestUsr_tl 
       + 1 
       + 1 
       //+ Msg_length 
       + 20;   private ulong _Msg_Id; // 8 Unsigned Integer 信息标识。 
      private uint _Pk_total; // 1 Unsigned Integer 相同Msg_Id的信息总条数,从1开始。 
      private uint _Pk_number; // 1 Unsigned Integer 相同Msg_Id的信息序号,从1开始。 
      private uint _Registered_Delivery; // 1 Unsigned Integer 是否要求返回状态确认报告: 
      //   0:不需要; 
      //   1:需要。 
      private uint _Msg_level; // 1 Unsigned Integer 信息级别。 
      private string _Service_Id; // 10 Octet String 业务标识,是数字、字母和符号的组合。 
      private uint _Fee_UserType; // 1 Unsigned Integer 计费用户类型字段: 
      //   0:对目的终端MSISDN计费; 
      //   1:对源终端MSISDN计费; 
      //   2:对SP计费; 
      //   3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。 
      private string _Fee_terminal_Id; // 32 Octet String 被计费用户的号码,当Fee_UserType为3时该值有效,当Fee_UserType为0、1、2时该值无意义。 
      private uint _Fee_terminal_type; // 1 Unsigned Integer 被计费用户的号码类型,0:真实号码;1:伪码。 
      private uint _TP_pId; // 1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9。 
      private uint _TP_udhi; // 1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐。 
      private uint _Msg_Fmt; // 1 Unsigned Integer 信息格式: 
      //   0:ASCII串; 
      //   3:短信写卡操作; 
      //   4:二进制信息; 
      //   8:UCS2编码; 
      //   15:含GB汉字 
      private string _Msg_src; // 6 Octet String 信息内容来源(SP_Id)。 
      private string _FeeType; // 2 Octet String 资费类别: 
      //   01:对"计费用户号码"免费; 
      //   02:对"计费用户号码"按条计信息费; 
      //   03:对"计费用户号码"按包月收取信息费。 
      private string _FeeCode; // 6 Octet String 资费代码(以分为单位)。 
      private string _ValId_Time; // 17 Octet String 存活有效期,格式遵循SMPP3.3协议。 
      private string _At_Time; // 17 Octet String 定时发送时间,格式遵循SMPP3.3协议。 
      private string _Src_Id; // 21 Octet String 源号码。SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码。 
      private uint _DestUsr_tl; // 1 Unsigned Integer 接收信息的用户数量(小于100个用户)。 
      private string[] _Dest_terminal_Id; // 32*DestUsr_tl Octet String 接收短信的MSISDN号码。   private uint _Dest_terminal_type; // 1 Unsigned Integer 接收短信的用户的号码类型,0:真实号码;1:伪码。 
      private uint _Msg_Length; // 1 Unsigned Integer 信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节),取值大于或等于0。 
      private string _Msg_Content; // Msg_length Octet String 信息内容。 
      private string _LinkID; // 20 Octet String 点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。 
      

  10.   

    ヅ能吃能睡iSee1223:
    "转载"? 可以代为调试、测试一下么?成功,能用我认账。