基于WSP/WTP的MMS传输(3)——MMS 传输

来源:互联网 发布:新手怎样开淘宝店铺 编辑:程序博客网 时间:2024/05/16 02:02

MMS 的传输过程如下:

1、  移动端通过GPRS拨号使设备成为无线网络上的一个节点

在wince平台下,拨号使用的设备类型为RASDT_Modem,本地号码是~GPRS!,如果是移动号码,节点是:CMWAP。联通的节点是:UNIWAP。设定这些参数的API分别是lineGetDevConfig(设定接入点)和RasSetEntryProperties(设定号码),测试sim卡能否正常拨号的一个方法是用串口工具向和PC连接的model发送AT命令。对无线模块GPRS拨号上网,需要用到AT+CGDCONT和ATD这两条指令:

1) AT+CGDCONT=l,“IP”,“CMWAP”
    此命令用于设置GPRS接入网关,其中第二个参数表示PDP (Packet Data Protocol)类型为:IP或PPP,第三个数表示接入网关为移动梦网,APN是CMWAP,表示中国移动网应用接口。目前只有中国移动全球通卡才可以使用CMNET功能,而动感地带只能使用CMWAP功能。联通的则用UNIWAP。
    2) ATD *99***1#
    ATD用于设置拨号方式,进行拨号,并设法进入在线(on-line)状态。与传统的电话线Modem相比较,ATD指令在GPRS中有些变化,采用如下两种格式:
   格式一:ATD*99[*[<called address>][*[<L2P>][*[<cid>]]]]#
    其中99是个服务码,也可用98的(见格式二),国内一般用99: <called address>是w.x.y.z格式的IP V4地址;<L2P>是用于TE和ME连接的Layer2协议或用于PPP协议的Layer2协议;<cid>是表明PDP上下文的一个数字编号,用AT +CGDCONT命令创建,一般为1, 20
    格式二:ATD*98[*<cid>]#
    含义同上。
    举例如下:
    ATD*99# //用服务码99建立一个连接
    ATD*99* 123.124.125.126*PPP* 1#
//用服务码99建立一个连接HIP地址123.124.125.124, L2P=PPP,用CID 1, //CID的值由AT十CGDCONT事先指定
    ATD*99***1# //用服务码99建立连接,CID =1,其它用事先指定的值
    ATD*98*1#//用服务码98建立一个IP连接,CID =1
    国内最常用的是:ATD *99***1#,本设计中就采用了此种格式。
    用ATD指令若能拨号上线则返回“CONNECT”,否则返回“NO CARRIER”。
这样,就完成了拨号上GPRS网络的功能,即接收到无线模块返回的“CONNECT",说明无线模块已经连上了移动GPRS的WAP网关,之后即为通过三阶段协商建立PPP链路的过程。

这里要说明的是如果拨完号后显示CONNECT,然后显示几串乱码,最后显示NO CARRIER就再也没有反映了,这是由于你的model没有自带的PPP协议,对于网络上的握手信号没有应答的缘故,由于我们有自己的OS,上面实现了PPP协议,所以可以不用管。

2、  通过Socket的UDP协议建立与WAP网关(10.0.0.172:9201)的连接

这里要注意的是建好socket后,用sendto 发送数据时,如果函数调用成功,并不代表数据发送成功,sendto只是在把数据成功放入发送队列后,不管发送与否,立即成功返回,判断数据是否成功发送的一个方法就是看目的服务器是否有响应,即recvfrom是否收到数据。

3、  建立连接以后再通过WSP协议Connect PDU与彩信服务中心建立会话

这里的Connect指的是WSP协议的Connect方法,Connect PDU有固定的打包格式,里面包含彩信服务中心的地址(如移动的彩信服务中心http://mmsc.monternet.com),我会在后面介绍。同样,WSP PDU需要经过WTP协议打包后最终以WTP PDU的形式发送出去。如果成功,WAP网关会给返回一个ConnectReply PDU。

4、  发送MMS,把按MMS协议打包好的数据通过WSP协议Post PDU发送出去 。如果是接收,则通过发送带有接收Uri的Get PDU来实现。

除了接收MMS使用Get方法外,其它的请求都用Post PDU。网关对Get PDU的成功响应是返回一个包括以所接收MMS内容为Data的Result PDU。

5、断开与彩信服务中心的连接

       这个操作使用WSP协议的Disconnect方法,里面唯一的参数是ConnectReply里的任务号(Session ID)。网关对这个请求是没有响应的,也就是说网关不会换回任何的PDU。

       到此,整个MMS会话过程结束。后面结合我自己的设计例子对MMS传输整个过程的PDU结构和编码进行详细的介绍。

转载请注明出处