.NET(C#)下的移动彩信MM7协议研究之路(二)
2012-08-29 11:19
621 查看
二:本次介绍彩信POST信息构成分析。SOAPDecode类构造与Envolope信息留至下篇吧。
首先,我们来看一个彩信包包头的示例:
包头部分:
包头部分可以使用以下C#代码输出:
彩信包头中,重要的是Content-Type与Content-Length这两部分。
Content-Type:multipart/related表明这次请求分多部分,boundary="--NextPart_0_6192_87016"表示各部分的分隔符是"--NextPart_0_6192_87016",start="</tnn-200102/mm7-vasp>"表示开始部分的Content-ID为"</tnn-200102/mm7-vasp>"。
Content-Length表示这次请求内容的主体长度。请求的主体可以用Request.InputStream来获取(在java中需要根据主体长度循环读取InputStream,C#中暂未实验,等实验后再更新)。
好了。彩信包头的信息就介绍到这。至于好多规范中说的可能还有MIME-Version: 1.0的字段,这个我抓包时发现移动的没传,解析中也没有用到这字段的地方,忽略吧。
下面看看彩信包主体示例:(主体较长,有41KB,除了标记,内容部分用......省略了)
彩信包中,用包头是提到的分隔符"--NextPart_0_6192_87016"做分割,可以得到两部分内容:第一部分为Content-ID为包头中start指定的,即Envelop的xml文件,第二部分为主体文件列表,又以以下部分开头:
再看看子内容部分:
今天先到这吧。接下来的事情就是将这些各部分文件分割,得到具体文件内容,并解析Envelop信息。
首先,我们来看一个彩信包包头的示例:
包头部分:
POST /MMS/Receiver HTTP/1.1 content-type: multipart/related; boundary="--NextPart_0_6192_87016";type="text/xml";start="</tnn-200102/mm7-vasp>" content-length: 41184 soapaction: "" x-mms-huawei-mm7-rcptto: 10658000 cache-control: no-cache pragma: no-cache user-agent: Java/1.5.0_16 host: 192.168.1.10:8080 accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 connection: keep-alive
包头部分可以使用以下C#代码输出:
StringBuilder strHeader = new StringBuilder(); strHeader.AppendLine(string.Format("{0} {1} {2}",Request.HttpMethod, Request.FilePath, "HTTP/1.1")); //这个HTTP/1.1用什么办法获取,谁知道指教下? foreach (var item in Request.Headers) { strHeader.AppendLine(string.Format("{0}:{1}", item, Request.Headers[item.ToString()])); }
彩信包头中,重要的是Content-Type与Content-Length这两部分。
Content-Type:multipart/related表明这次请求分多部分,boundary="--NextPart_0_6192_87016"表示各部分的分隔符是"--NextPart_0_6192_87016",start="</tnn-200102/mm7-vasp>"表示开始部分的Content-ID为"</tnn-200102/mm7-vasp>"。
Content-Length表示这次请求内容的主体长度。请求的主体可以用Request.InputStream来获取(在java中需要根据主体长度循环读取InputStream,C#中暂未实验,等实验后再更新)。
好了。彩信包头的信息就介绍到这。至于好多规范中说的可能还有MIME-Version: 1.0的字段,这个我抓包时发现移动的没传,解析中也没有用到这字段的地方,忽略吧。
下面看看彩信包主体示例:(主体较长,有41KB,除了标记,内容部分用......省略了)
----NextPart_0_6192_87016 Content-Type: text/xml;charset="UTF-8" Content-Transfer-Encoding: 8bit Content-ID: </tnn-200102/mm7-vasp> <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header> <mm7:TransactionID xmlns:mm7="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0" env:mustUnderstand="1">0730000009740120813230806001</mm7:TransactionID> </env:Header> <env:Body> <DeliverReq xmlns="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0"> <MM7Version>6.3.0</MM7Version> <Sender>+8613900000000</Sender> <Recipients><To><Number>10658000</Number></To></Recipients> <TimeStamp>2012-08-13T23:08:06+08:00</TimeStamp> <Priority>Normal</Priority> <Subject>转发:中国移动信息</Subject> <MMSRelayServerID>900000</MMSRelayServerID> <ReplyChargingID></ReplyChargingID> <Content href="cid:defaultID"/> </DeliverReq> </env:Body> </env:Envelope> ----NextPart_0_6192_87016 Content-Type:multipart/related;start="<smil-part>";type="application/smil";boundary="SubPart_1_2339_28544" Content-ID:defaultID --SubPart_1_2339_28544 Content-Type:application/smil;name="SMIL.smil" Content-ID:<smil-part> Content-Location:SMIL.smil Content-Transfer-Encoding: 8bit ...... --SubPart_1_2339_28544 Content-Type:text/plain;charset="UTF-8";name="3067296.txt" Content-ID:<2733504> Content-Location:3067296.txt Content-Transfer-Encoding: 8bit ...... --SubPart_1_2339_28544 Content-Type:image/jpeg;name="cover.jpg" Content-ID:<2733600> Content-Location:cover.jpg Content-Transfer-Encoding: 8bit ...... --SubPart_1_2339_28544 Content-Type:text/plain;charset="UTF-8";name="2973696.txt" Content-ID:<2735504> Content-Location:2973696.txt Content-Transfer-Encoding: 8bit ...... --SubPart_1_2339_28544-- ----NextPart_0_6192_87016--
彩信包中,用包头是提到的分隔符"--NextPart_0_6192_87016"做分割,可以得到两部分内容:第一部分为Content-ID为包头中start指定的,即Envelop的xml文件,第二部分为主体文件列表,又以以下部分开头:
Content-Type:multipart/related;start="<smil-part>";type="application/smil";boundary="SubPart_1_2339_28544" Content-ID:defaultID从这部分信息中,可以看出:接下来的第二部分内容,是以"SubPart_1_2339_28544"作分割的子内容。
再看看子内容部分:
--SubPart_1_2339_28544 Content-Type:text/plain;charset="UTF-8";name="2973696.txt" Content-ID:<2735504> Content-Location:2973696.txt Content-Transfer-Encoding: 8bit ......子内容部分又分为信息头与主体部分,以两个\r\n\r\n分割。说明了此部分文件类型、文件名、ID、编码方式等信息。
今天先到这吧。接下来的事情就是将这些各部分文件分割,得到具体文件内容,并解析Envelop信息。
相关文章推荐
- .NET(C#)下的移动彩信MM7协议研究之路(一:题记)
- 由彩信MM7协议引起的对HTTP和SOAP协议的研究
- asp.net(C#)利用QRCode生成二维码---.NET菜鸟的成长之路
- .net C# Treeview的Node拖动,Node节点上下移动
- NET(C#)接入Dubbo服务,Zookeeper作为Dubbo服务的注册中心,实现thrift协议访问接口(1)
- 在unity3d中接受MQTT消息协议数据C# .net,M2Mqtt
- C#基础学习第三天(.net菜鸟的成长之路-零基础到精通)
- .net C# Treeview的Node拖动,Node节点上下移动收藏
- c# 远程监控(3) RTP协议 RTP.NET.DLL
- .net C# Treeview的Node拖动,Node节点上下移动
- (转)【ASP.net文档】用C#实现HTTP协议下的多线程文件传输
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- ASP.NET(C#)连接SQL EXPRESS 研究中……
- 大型webgame缓存研究 MemCached VB.Net C#
- 【ASP.net文档】用C#实现HTTP协议下的多线程文件传输
- vs2005制做左右上下移动的Listbox ( asp.net , C#)
- ASP.NET(C#)和Sql2005组合性能问题研究
- C#图片框跟随鼠标移动_Asp_net教程__Net教程_Vb_net教程_Vc_net_C#编程.txt
- Asp.net C# 学习与研究 Archivers
- 【ASP.net文档】用C#实现HTTP协议下的多线程文件传输