中国移动集团公司

修改记录
文件编号 版本号 拟制人/
修改人 拟制/修改日期 更改理由 主要更改内容
(写要点即可)
  V1.1 胡冬梅 2004.03.22 修改、整理  
  V1.2 胡冬梅 2004.04.14 增加内容 增加安装说明
  V1.3 胡冬梅 2004.4.21 增加内容 增加状态码等说明
      V1.5.1 胡冬梅 2004.5.12 增加内容 增加获取API版本信息、API返回码说明等

目    录
 
1.概述... 5
2.概念... 5
2.1企业代码... 5
2.2服务代码... 6
2.3业务代码... 6
2.3.1上行业务的业务代码规范... 6
2.3.2下行业务的业务代码规范... 8
2.4操作指令码... 10
2.5下行业务... 11
2.6上行业务... 11
2.7递送报告... 11
3.安装方法... 11
3.1 MM7 API的使用... 11
3.2配置文件的设置... 11
4.开发方法... 13
4.1 VASP接收传送请求(上行业务)... 13
4.1.1 方式1:普通应用程序中的用法... 13
4.1.2 方式2:Web应用程序中的用法... 14
4.2发送多媒体消息的过程(下行业务)... 15
4.2.1准备... 15
4.2.2创建待发送消息... 16
4.2.2.1 创建提交增值业务的多媒体消息(MM7SubmitReq)... 16
4.2.2.2 创建取消多媒体消息(MM7CancelReq)... 18
4.2.2.3 创建替换多媒体消息(MM7ReplaceReq)... 18
4.2.3 创建消息内容体... 19
4.2.4 发送多媒体消息... 20
4.2.5发送MM7SubmitReq消息到移动终端实例... 20
4.3 VASP接收传送消息以及发送提交消息实例... 21
4.4 VASP接收状态报告(上行业务)... 24
4.4.1方式1:普通应用程序中的用法... 24
4.4.2方式2:Web应用程序中的用法... 25
4.5 VASP接收读后回复报告(上行业务)... 26
4.5.1方式1:普通应用程序中的用法... 26
4.5.2方式2:Web应用程序中的用法... 27
4.6 发送取消消息(下行业务)... 27
4.7 发送替换消息(下行业务)... 28
5.开发过程中需用的一些Status解释... 29
5.1 关于VASP接收到消息后设置返回响应(Res)的状态码及状态报告的解释... 29
5.2 关于VASP收到DeliverReq中MMStatus的解释... 30
5.3 关于VASP收到ReadReplyReq中ReadStatus的解释... 30
6.获取MM7 API版本信息的方法... 30
7. MM7 API返回StatusCode说明... 30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1.概述
该文档说明了SP如何使用中国移动集团公司的MM7 API程序与彩信中心进行对接,实现MM7接口的通讯,开发增值业务应用。
该MM7 API是使用纯Java开发的,使用的JDK的版本为JDK1.4.0。所以使用该API进行开发时,要求使用的JDK版本必须是JDK1.4.0以上版本。该API所使用的通讯承载协议是HTTP/1.1。
 
缩略词:
 MM:    Multimedia Message (多媒体消息)
 MMS:   Multimedia Message Service(多媒体消息服务)
 MMSC: Multimedia Message Service Center(多媒体消息服务中心)
 VAS:    Value Added Service(增值业务)
 SP:      Service Provider(业务提供商)
 HTTP:   Hypertext Transfer Protocol(超文本传输协议)
2.概念
2.1企业代码
企业代码是企业身份的标识,网络中地址翻译、计费、结算等均以企业代码为依据。企业代码的数据需要在MMSC和BOSS系统中进行配置。企业代码以数字表示,共6位,从“8XY000”至“8XY999”,其中“XY”为各移动分公司代码。
彩信全网业务的SP企业代码为8XY001-8XY999。(目前短信全网业务的企业代码为9XY001-9XY500,WAP全网业务的企业代码为9XY501-9XY999。)彩信地方业务的SP企业代码由各地方移动公司按照业务许可的顺序依次分配制定,“XY”具体分配情况见相关表格。
2.2服务代码
服务代码是:用户使用彩信的发送、上传等上行类业务时,需要输入的接收方号码;或SP在根据用户的点播请求在向用户发送、下载等下行类业务时,用户终端中显示的发送方的号码。服务代码的数据需要在MMSC上进行配置,用于路由的查找和状态报告的返回。服务代码以数字表示。
全国业务的服务代码长度统一为4位,即“1000”-“9999”;本地业务服务代码长度统一为5位,即“01000”-“09999”。
以下号码或号段暂不分配:
13XX(XX=00-99)、20XX(XX=01-99)、168X(X=0-9)、186X(X=0-9)、1258/1259、172X(X=0-9)、6XXX、7XXX。
上述代码的分配和使用情况均可以在www.monternet.com上查询。
如果SP已经开展了短信等业务,原则上彩信的服务代码依照SP原有的服务代码进行分配,以保证用户的使用习惯。
目前全网业务的服务代码,由集团公司统一分配。
2.3业务代码
业务代码表示业务类别,并且区分不同业务的信息服务费。业务代码的数据需要在MMSC和BOSS系统中进行配置。业务代码用数字表示,并且不能使用000。
为便于进行业务统计和分析,业务代码尽量按照不同的业务分类如下:
互联网点播类: 以1开头
     WAP点播类:   以2开头
短信点播类: 以3开头
      STK点播类: 以4开头
彩信点播类: 以0开头
业务代码在遵循原则的前提下其余内容由SP自己制定。
2.3.1上行业务的业务代码规范
上行业务的业务代码为三位,其构成如下:
第1位:0、7、9开头的业务代码保留,其他代码由彩信SP自行编排。
第2~3位:由彩信SP自行编排
       特例:如果用户直接给四位服务代码发送上行彩信,系统会默认加上业务代码“0”,该业务代码默认开通,仅用于上行彩信到服务代码。
2.3.2下行业务的业务代码规范
下行业务的业务代码为六位,其构成如下:
第1位:功能标识位,目前有如下两种选择:
l         1,代表一般下行业务
l         7,代表用于“先机时代”项目中手机内置并参与渠道分成的业务
l         6,代表用于集团客户应用的业务(免费)
其他数字目前保留。
第2位:彩信业务一级分类,具体如下面表格:
第3位:彩信业务二级分类,具体如下面表格:
一级分类及标识代码 二级分类及标识代码
新闻天气(1) 天气预报(1)
  热点快讯(2)
  社会新闻(3)
  体育新闻(4)
  娱乐新闻(5)
  财经新闻(6)
  综合新闻(0)
游戏娱乐(2) 聊天交友(1)
  笑话幽默(2)
  彩信游戏(3)
  影音视线(4)
  互动有奖(5)
  五花八门(0)
时尚生活(3) 时尚有约(1)
  车迷世界(2)
  文化教育(3)
  情感画廊(4)
  爱情家庭(5)
  两性健康(6)
  证券财经(7)
  位置服务(8)
  五花八门(0)
卡通动漫(4) 欧美(1)
  日本(2)
  韩国(3)
  港台(4)
  本地原创(5)
  五花八门(0)
彩信铃声(5) 明星专辑(1)
  精品影视(2)
  流行音乐(3)
  古典音乐(4)
  卡拉OK(5)
  特殊音效(6)
  五花八门(0)
彩图动画(6) 人物剪影(1)
  动物一族(2)
  美丽心情(3)
  温馨祝福(4)
  电影名画(5)
  体育纵横(6)
  大千世界(7)
  3D动画(8)
  五花八门(0)
彩信DIY(7) 贺卡类(1)
  形象类(2)
  文字类(3)
  五花八门(0)
特色用途(0) 免费客服(1)
  优惠套餐(2)

第4位:业务模式位,各个模式及其数字标识如下:
l         1:按条点播
l         2:按条定制
l         3:包月定制
l         4:包月点播
第5~6位:由彩信SP自行编排
2.4操作指令码
操作指令码是指用户通过短信点播或定制彩信业务时,在短信的信息体内输入的代码,或用户上行发送彩信时,在彩信消息体内的文本信息中输入的代码。操作指令码用于标识对彩信的处理方式。此代码出现在短信或彩信的消息体内,由SP自行处理,彩信中心不负责处理该代码。
在短信中输入的操作指令码应严格区分用户是点播、定制短信业务还是彩信业务。如果用户通过短信点播或定制彩信业务,操作指令码应以CX开头。
如:用户在短信或彩信文本信息体内输入“CX XW”发送至8888,就是定制新浪提供的彩信图片新闻业务。
2.5下行业务
由SP主动发起的业务。这里主要指SP向MMSC发起的业务。
2.6上行业务
SP被动接收的业务。这里主要指从MMSC那里接收业务。
2.7递送报告
报告是接收方(终端)对接收到消息的处理方式信息。递送报告指MMSC在获取这个报告后把这个信息发送给发送方(SP)。接收方对消息的处理可能是接收或者拒绝等。处理流程如下:
l         SP发送消息(通过MMSC)给终端,并且要求递送报告;
l         终端接收到消息后做相应处理(接收或拒绝);
l         MMSC把终端对消息的处理信息(递送报告)发送给SP。
3.安装方法
    这里主要介绍一下如何将MM7 API运用到VASP自己开发的程序中以及在配置文件中需要注意修改的地方。
3.1 MM7 API的使用
在VASP用Java开发自己程序时,只要将中国移动集团公司提供的mm7api.jar和lib下的所有的Jar文件加入到classpath中即可。
3.2配置文件的设置
    配置文件mm7Config.xml需要根据SP情况进行修改。
 
<?xml version="1.0"?>
<vasp:MM7Config xmlns:vasp="http://mms.chinamobile.com/mm7ConfigSchema">
       <AuthenticationMode>1</AuthenticationMode>
       <UserName>zxme</UserName>
       <Password>zxme</Password>
       <MaxMessageSize>100000000</MaxMessageSize>
       <LogPath>c:/vas_log</LogPath>
       <logLevel>1</logLevel>
       <LogNum>100</LogNum>
       <LogInterval>120</LogInterval>
       <LogSize>200</LogSize>
       <Charset>UTF-8</Charset>
       <MmscID>1</MmscID>
       <mmscURL> /mm7</mmscURL>
       <mmscIP>192.120.231.180</mmscIP>     
       <UseSSL>true</UseSSL>
       <ListenIP>192.120.231.228</ListenIP>
       <ListenPort>80</ListenPort>
       <BackLog>50</BackLog>
       <TimeOut>10000</TimeOut>
       <ReSendCount>5</ReSendCount>      
</vasp:MM7Config>
 
一些地方需要进行修改,下面一一说明:
<AuthenticationMode>1</AuthenticationMode>
表示VASP作为服务端接收消息时是否进行鉴权或进行什么样的鉴权,0表示不鉴权,1表示进行基本鉴权,2表示进行摘要鉴权。
<UserName>zxme</UserName>
<Password>zxme</Password>
表示彩信中心对VASP进行鉴权时的用户名和密码,同时也是VASP对接入的彩信中心进行鉴权时用户名和密码,是双向的,要VASP和MMSC双方进行约定。
<LogPath>c:/vas_log</LogPath>
表示日志存放的路径,在Windows操作系统下和Linux下是不一样的,要注意进行修改。
<MmscID>1</MmscID>
表示MMSC网关的序号,需要从MMSC处得到。
<mmscURL> /mm7</mmscURL>
<mmscIP>192.120.231.180</mmscIP>     
分别表示MMSC网关的URL地址和IP(或主机名),也需要MMSC处得到。这里也可以填成ip:port。例如:192.120.231.180:8080,不填端口号使用默认端口号80。
<ListenIP>192.120.231.228</ListenIP>
<ListenPort>80</ListenPort>
表示当VASP用应用程序方式进行接收消息时的监听地址和端口号。
以上为这个配置文件中主要需要注意修改的地方,当然其他的内容也可以进行修改,如<logLevel>1</logLevel>可以根据需要进行修改,0表示不产生日志;1表示产生错误日志;3表示产生信息日志;6表示产生完整信息日志。
 
<TimeOut>90000</TimeOut>
表示设置发送的超时时间,若发送超过这个时间,则自动进行重新发送。
<ReSendCount>2</ReSendCount>
表示设置重发的次数,建议在3次以下,一般用2次即可。
4.开发方法
这里主要介绍从SP接收MMSC发过来的DeliverReq开始,到SP发送SubmitReq到MMSC的整个流程,SP所需要做的工作。
4.1 VASP接收传送请求(上行业务)
VASP接收可以有两种方式:
l         如果SP的增值应用是一个普通应用程序,可以使用方式1,即接收代理会自动打开一个监听端口,启动一个监听线程来接收来自MMSC的多媒体消息;
l         如果SP的增值应用是一个Web应用,则可以使用方式2,即接收代理作为一个Servlet运行,并自动处理从HttpRequest中搜索数据,并解码成多媒体消息。
 
4.1.1 方式1:普通应用程序中的用法
 
public class MyReceiver extends MM7Receiver
{
    //定义一个MM7DeliverReq,以便得到MMSC发过来的Deliver消息。(必备)
    public static MM7DeliverReq deliverReq = new MM7DeliverReq();
    //Main方法
       public static void main(String[] args)
       {
//初始化VASP
MM7Config mm7Config = new MM7Config(“./config/mm7Config.xml”);
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“./config/ConnConfig.xml”); //必备
//构造MyReceiver
MyReciever receiver = new MyReceiver();
myReceiver.setConfig(mm7Config);   //必备
//创建MM7消息发送接口
MM7Sender mm7Sender = new MM7Sender(mm7Config);
//启动接收器
receiver.start();
for(;;);
       }
       public MM7VASPRes doDeliver(MM7DeliverReq request)
       {
        /*接收从MMSC发过来的传送消息,以便取出其中的部分值构造提交消息或得到一些有用
信息,如MMSC的标识符等*/
        deliverReq = request;
        System.out.println(“收到手机”+request.getSender()
+“提交的消息,标题为:”+request.getSubject());
        System.out.println("MMSC的标识符为:"+request. GetMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7DeliverRes消息,设置ServiceCode或StatusCode
MM7DeliverRes mm7DeliverRes = new MM7DeliverRes();
mm7DeliverRes.setServiceCode("服务代码"); //设置ServiceCode,可选
mm7DeliverRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请求完成状
态,必备,以便表明SP已经接收到传送消息。一般设1000。*/
        mm7DeliverRes.setStatusText("所用状态文本说明"); /*设置所用状态的文本说明,
应限定请求状态,可选*/
        //返回给MM7 API,以便API将MM7DeliverRes返回给MMSC。
return(MM7VASPRes)mm7DeliverRes;
    }
}
4.1.2 方式2:Web应用程序中的用法
 
public class MyReceiver extends MM7RecieveServlet
{
    public MM7VASPRes doDeliver(MM7DeliverReq request)
    {
        System.out.println(“收到手机”+request.getSender()
+“提交的消息,标题为:”+request.getSubject());
System.out.println("MMSC的标识符为:"+request. GetMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7DeliverRes消息,设置ServiceCode或StatusCode
MM7DeliverRes mm7DeliverRes = new MM7DeliverRes();
mm7DeliverRes.setServiceCode("服务代码"); //设置ServiceCode,可选
mm7DeliverRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请求完成状
态,必备,以便表明SP已经接收到传送消息。一般设1000。*/
        mm7DeliverRes.setStatusText("所用状态文本说明"); /*设置所用状态的文本说明,
应限定请求状态,可选*/
//返回给MM7 API,以便API将MM7DeliverRes返回给MMSC。
return(MM7VASPRes)mm7DeliverRes;
    }
}
4.2发送多媒体消息的过程(下行业务)
发送多媒体消息的过程就是使用MM7 API组织消息,并通过MM7Sender发送给MMSC的过程。主要步骤如下:
4.2.1准备
1. 初始化VASP
初始化VASP使用的是MM7Config类,该类定义了有关本VASP和对应的MMSC的配置信息。系统在初始化时,必须对该对象进行定义,它将用于通信类的控制。
MM7Config mm7Config = new MM7Config("./config/mm7Config.xml ");
其中mm7Config.xml为配置文件,其格式如下:
<?xml version="1.0"?>
<vasp:MM7Config xmlns:vasp="http://mms.chinamobile.com/mm7ConfigSchema">
<!--鉴权方式,1为基本鉴权,2为摘要鉴权,0为不使用鉴权-->
    <AuthenticationMode>0</AuthenticationMode>
<!--设置用户名, 必须为被授权的用户(4位)-->
    <UserName>1111</UserName>
<!--设置VASP的密码(6位)-->
    <Password>11111111</Password>
    <!—设置允许的最大消息的大小(以字节为单位),目前最大支持128K-->
    <MaxMessageSize>100000</MaxMessageSize>
    <!--设置日志路径-->
    <LogPath>c:/vas_log</LogPath>
    <!--设置日志级别,8 个级别(0)No log(1)Severe, (2)Warning, (3)Info, (4)Config, (5)Fine, (6)Finer, (7)Finest-->
    <logLevel>1</logLevel>
    <!--设置指定用于对消息编码的字符集(缺省值为UTF-8)-->
    <Charset>UTF-8</Charset>
    <!--MMSC网关的URL地址-->
    <mmscURL>/mm7</mmscURL>
    <!-- MMSC网关的IP或主机名列表-->
    <mmscIP>202.202.202.202</mmscIP>
<!—MMSC网关的序号à
<MmscID>910010</MmscID>
    <!--是否启用SSL加密,false:不加密,true:SSL加密-->
<UseSSL>true</UseSSL>
<!--应用程序方式的监听IP地址-->
    <ListenIP>102.102.102.102</ListenIP>
    <!--应用程序方式的监听端口-->
    <ListenPort>80</ListenPort>
    <!--日志文件的最大产生数量,单位为个,缺省值为100,取值范围为:1至9999。-->
    <LogNum>100</LogNum>
<!--日志记录的产生时间间隔,单位为分,缺省值为60,取值范围为:1至1440-->
    <LogInterval>10</LogInterval>
<!--日志文件大小的最大限制,单位为K,缺省值为500K,最大值为10000K。-->
    <LogSize>1000</LogSize>
</vasp:MM7Config>
 
 
2. 创建MM7消息发送接口:
创建发送接口使用的是MM7Sender类,其中已经封装了和MMSC连接的通讯机制,使用时只要创建它的一个带MM7Config参数的实例即可。
MM7Sender mm7Sender = new MM7Sender(mm7Config);
4.2.2创建待发送消息
创建待发送消息使用的类均是由MM7Message继承得到的。主要有MM7SubmitReq、MM7CancelReq、MM7ReplaceReq等类,具体设置方法将分别进行介绍。
4.2.2.1 创建提交增值业务的多媒体消息(MM7SubmitReq)
1.创建消息对象
MM7SubmitReq submitReq = new MM7SubmitReq();
2.设置消息属性
submitReq.setTransactionID("关联标识");
/*设置MM7_submit.REQ/MM7_submit.RES对的标识,必备*/
submitReq.setVASPID("SP代码") ; //设置SP代码,必备
submitReq.setVASID("服务代码") ; //设置服务代码,必备
submitReq.setServiceCode("业务代码"); //设置业务代码,必备
submitReq.setSenderAddress("MM始发方的地址");设置MM始发方的地址(填写SP的服务代码,或者填写让用户回复SP的长号码,长号码构成:SP的服务代码+业务代码+操作码),必备
submitReq.setChargedPartyID(“付费方手机号码”); //设置付费方的手机号码,必备
submitReq.setTo("接收方地址"); //设置接收方MM的地址
submitReq.addTo("单个接受方地址"); //增加单个接受方地址
submitReq.setCc("抄送方地址"); //设置抄送方MM的地址
submitReq.addCc("单个抄送方地址"); //增加单个抄送方地址
submitReq.setBcc("密送方地址"); //设置密送方MM的地址
submitReq.addBcc("单个密送方地址"); //增加单个密送方地址
注:在设置或增加To,Cc和Bcc时,至少需要设置其中一个,这些地址可能存在多
个地址或使用指示使用分发表的别名。可以标记仅供参考的地址。
submitReq.setLinkedID("链接标识"); /*设置链接标识,标识传送至VASP的上一
个有效消息的对应关系;可选*/
submitReq.setMessageClass("MM的类别"); /*设置MM的类别(例如,广告、
信息服务和计费),可选,具体有:Auto、Personal、Advertisement、Informational*/
submitReq.setTimeStamp("提交MM的日期和时间"); /*提交MM的时间和日期
(时间戳),格式如2004-02-09T10:21:07,可选*/
submitReq.setExpiryDate("指定超时时间"); /*设置MM指定的超时时间(绝对
或相对时间),可选*/
submitReq.setEarliestDeliveryTime("最早理想时间"); /*设置将MM传送给接收
方的最早理想时间(绝对或相对时间),可选*/
submitReq.setDeliveryReport("发送报告的请求"); /*设置是否需要发送报告的请
求(boolean值),可选*/
submitReq.setReadReply("需要读取报告的请求"); /*设置通过请求传送一个读
取报告进行确认,可选*/
submitReq.setReplyCharging("应答计费的请求"); /*设置应答计费的请求
(boolean值),可选*/
submitReq.setReplyDeadline("提交应答的最迟时间"); /*设置在应答计费的情况
下,向接收方提交应答的最迟时间(绝对或相对时间),可选*/
submitReq.setReplyChargingSize("应答MM的最大大小"); /*设置在应答计费的情况下,提供给接收方的应答MM的最大大小,可选*/
submitReq.setPriority("消息的优先级"); /*消息的优先级(重要性)(0=最低优先级,1=正常,2=紧急),byte类型的值,可选*/
submitReq.setSubject("多媒体消息的标题"); /*设置多媒体消息的标题,可选*/
submitReq.setAllowAdaptations("VASP是否允许修改内容"); /*设置VASP是否允许修改内容(boolean值,默认为真),可选*/
submitReq.setChargedParty("VASP所提交MM的付费方"); /*设置VASP所提交MM的付费方,例如,发送方、接收方、发送方和接收方或两方均不付费,可选,0:Sender、1:Recipients、2:Both、3:Neither、4:ThirdParty*/
submitReq.setContent("多媒体消息的内容"); /*设置多媒体消息的内容,可选,注意当要设置时,一定要设置其ContentType。*/
submitReq.setDistributionIndicator("是否可重新分发"); /*设置VASP是否可重新分发MM的内容(boolean值,true为可以,false为不可以),可选*/
4.2.2.2 创建取消多媒体消息(MM7CancelReq)
1.创建消息对象
MM7CancelReq cancelReq = new MM7CancelReq();
2. 设置消息属性
cancelReq.setTransactionID("关联标识");   /*MM7_cancel.REQ/MM7_cancel.RES
对的标识,必备*/
cancelReq.setVASPID("SP代码"); /*设置SP代码,可选*/
cancelReq.setVASID("服务代码"); /*设置服务代码,可选*/
cancelReq.setSenderAddress("MM始发方地址"); /*设置MM始发方地址,可选*/
cancelReq.setMessageID("待取消的消息的标识符"); /*设置待取消的消息的标识符,必备*/
4.2.2.3 创建替换多媒体消息(MM7ReplaceReq)
1.创建消息对象
MM7ReplaceReq replaceReq = new MM7ReplaceReq();
2. 设置消息属性
replaceReq.setTransactionID("关联标识");
/*设置MM7_replace.REQ/MM7_replace.RES对的标识,必备*/
replaceReq.setVASPID("SP代码"); /*设置SP代码,可选*/
replaceReq.setVASID("服务代码"); /*设置服务代码,可选*/
replaceReq.setMessageID("被当前消息所替换的消息的标识符"); /*被当前消息
所替换的消息的标识符,必备*/
replaceReq.setServiceCode("业务代码"); /*设置业务代码,可选*/
replaceReq.setTimeStamp("提交MM的日期和时间"); /*设置提交MM的时间和
日期(时间戳),格式如2004-02-09T10:21:07,可选*/
replaceReq.setEarliestDeliveryTime("最早理想时间"); /*设置将MM传送给接收
方的最早理想时间(绝对或相对时间),可选*/
replaceReq.setReadReply("需要读取报告的请求"); /*设置通过请求传送一个读
取报告进行确认(boolean值,true为需要,false为不需要),可
选*/
replaceReq.setAllowAdaptations("VASP是否允许修改内容"); /*设置VASP是否允许
修改内容(boolean值,默认为真),可选*/
replaceReq.setContent("多媒体消息内容"); /*设置多媒体消息的内容,可选,注意当要
设置时,一定要设置其ContentType。*/
replaceReq.setDistributionIndicator("是否可重新分发"); /*设置VASP是否可重新分发
MM的内容(boolean值,true为可以,false为不可以),可选*/
4.2.3 创建消息内容体
每个消息内容体就是一个MMContent实例,可以添加多个消息内容体,但是所有消息内容体大小之和不能超过MMSC允许大小(目前最大支持128K)。
MMContent content = new MMContent();
/**设置附件的类型,若不包含SMIL格式的文件,则设置类型为MMConstants.ContentType. MULTIPART_MIXED,若包含SMIL格式的文件,则设置类型为MMConstants.ContentType. MULTIPART_RELATED*/
content.setContentType(MMConstants.ContentType. MULTIPART_MIXED);
/**添加类型为Gif的附件一 */
MMContent sub1 = MMContent.createFromFile("f://yellow.gif");
sub1.setContentID("1.gif");   //可以不设
/**设置子附件的类型,有两种设置方式:一种是在setContentType里面填写MMConstants.ContentType里面定义的常量,另一种是在setContentType里面填写一个String的类型,如text/plain等。*/
sub1.setContentType(MMConstants.ContentType.GIF); //一定要设置
content.addSubContent(sub1);
/**添加类型为Txt的附件二*/
MMContent sub2 = MMContent.createFromString("This is a Test2!");
sub2.setContentType(MMConstants.ContentType. TEXT); //一定要设置
sub2.setContentID("2.txt");
content.addSubContent(sub2);
/**将附件进行设置,设需发送消息为MM7SubmitReq*/
submitReq.setContent(content);
4.2.4 发送多媒体消息
调用MM7Sender的send方法发送多媒体消息,返回MM7RSRes类型的消息。举例,发送MM7SubmitReq类型的消息:
MM7RSRes res = mm7Sender.send(submitReq); //其它消息与此类似
4.2.5发送MM7SubmitReq消息到移动终端实例
package com.cmcc.mm7.vasp.conf;
 
import com.cmcc.mm7.vasp.message.*;
import com.cmcc.mm7.vasp.service.MM7Sender;
import com.cmcc.mm7.vasp.common.*;
import java.io.*;
 
public class VaspSendTest {
public static void main(String[] args) {
       MM7Config mm7Config = new MM7Config("./config/mm7Config.xml");
       mm7Config. setConnConfigName("./config/ConnConfig.xml");
       MM7Sender mm7Sender = new MM7Sender(mm7Config);
       MM7SubmitReq submit = new MM7SubmitReq();
       submit.setTransactionID("11111111");
    submit.addTo("13915002000");
    submit.setVASID("1234");
    submit.setServiceCode("123");
    submit.setSubject("测试");
       MMContent content = new MMContent();
    content.setContentType(MMConstants.ContentType. MULTIPART_MIXED);
       MMContent sub1 = MMContent.createFromFile("f://yellow.gif");
    sub1.setContentID("1.gif");
    sub1.setContentType(MMConstants.ContentType.GIF);
    content.addSubContent(sub1);
       MMContent sub2 = MMContent.createFromString("This is a Test2!");
       sub2.setContentID("2.txt");
sub2.setContentType(MMConstants.ContentType. TEXT);
       content.addSubContent(sub2);
       submit.setContent(content);
       MM7RSRes res = mm7Sender.send(submit);
       System.out.println("res.statuscode=" + res.getStatusCode() +
                           ";res.statusText=" + res.getStatusText());
}
}
4.3 VASP接收传送消息以及发送提交消息实例
举一个实例说明VASP构建MM7SubmitReq,发送给MMSC,并得到返回消息,通过StatusCode判断,本次发送是否成功,若成功,得到MessageID,以便以后希望取消或替换该消息时用。
 
public class MyReceiver extends MM7Receiver
{
    //定义一个MM7DeliverReq,以便得到MMSC发过来的Deliver消息。(必备)
    public static MM7DeliverReq deliverReq = new MM7DeliverReq();
    //Main方法
       public static void main(String[]args)
       {
     //初始化VASP
MM7Config mm7Config = new MM7Config(“../config/mm7Config.xml”);
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“../config/ConnConfig.xml”); //必备
//构造MyReceiver
MyReciever receiver = new MyReceiver();
receiver.setConfig(mm7Config); //必备
//创建MM7消息发送接口
MM7Sender mm7Sender = new MM7Sender(mm7Config);
//启动接收器
receiver.start();
//接收MM7DeliverReq完毕,开始构造MM7SubmitReq
//有两种可能,一种是MM7SubmitReq完全由SP构造,另一种是SP用接收到的
//MM7DeliverReq的部分内容进行填充。
MM7SubmitReq submitReq = new MM7SubmitReq();
submitReq.setVASPID("SP代码") ; //必备
submitReq.setVASID("服务代码") ; //必备
submitReq.setServiceCode("业务代码"); //必备
submitReq.setSenderAddress("MM始发方的地址"); /*必备,若想从MM7DeliverReq中获得,
则应按下面的方式设:              submitReq.setSenderAddress(deliverReq.getSender());*/
submitReq.setTo("接收方地址"); /*若想从MM7DeliverReq中获得,则应按下面的方式设:
           submitReq.setTo(deliverReq.getTo());*/
        submitReq.addTo("单个接受方地址"); //增加单个接受方地址
submitReq.setCc("抄送方地址"); /*若想从MM7DeliverReq中获得,则应按下面的方式设:
                     submitReq.setCc(deliverReq.getCc()) ;*/
        submitReq.addCc("单个抄送方地址"); //增加单个抄送方地址
submitReq.setBcc("密送方地址"); /*若想从MM7DeliverReq中获得,则应按下面的方式设:
submitReq.setBcc(deliverReq.getBcc()) ;*/
submitReq.addBcc("单个密送方地址"); //增加单个密送方地址
submitReq.setLinkedID("链接标识"); /*可选,若想从MM7DeliverReq中获得,则应按
下面的方式设:submitReq.setLinkedID(deliverReq.getLinkedID()) ;*/
submitReq.setMessageClass("MM的类别"); /*可选*/
submitReq.setTimeStamp("提交MM的日期和时间"); /*格式如2004-02-09T10:21:07,
可选*/
submitReq.setExpiryDate("指定超时时间"); /*可选*/
submitReq.setEarliestDeliveryTime("最早理想时间"); /*可选*/
submitReq.setDeliveryReport("发送报告的请求"); /* boolean值,可选*/
submitReq.setReadReply("需要读取报告的请求"); /*可选*/
submitReq.setReplyCharging("应答计费的请求"); /*boolean值,可选*/
submitReq.setReplyDeadline("提交应答的最迟时间"); /*可选*/
submitReq.setReplyChargingSize("应答MM的最大大小"); /*可选*/
submitReq.setPriority("消息的优先级"); /* 0=最低优先级,1=正常,2=紧急,byte类型的值,可选,若想从MM7DeliverReq中获得,则应按下面的方式设:
submitReq.setPriority(deliverReq.getPriority());*/
submitReq.setSubject("多媒体消息的标题"); /*可选,若想从MM7DeliverReq中获得,则
应按下面的方式设:SubmitReq.setSubject(deliverReq.getSubject());*/
submitReq.setAllowAdaptations("VASP是否允许修改内容"); // boolean值,默认为真,可选
submitReq.setChargedParty("VASP所提交MM的付费方"); /*可选*/
submitReq.setChargedPartyID("chargedPartyID"); /*必备*/
submitReq.setDistributionIndicator("是否可重新分发"); /*boolean值,true为可以,false为不
可以,可选*/
//开始创建多媒体消息的内容
/*每个消息内容体就是一个MMContent实例,可以添加多个消息内容体,但是所有消息内容体大小之和不能超过MMSC允许大小(目前最大支持128K)。*/
MMContent content = new MMContent();
content.setContentType(MMConstants.ContentType.MULTIPART_RELATED);
/**添加类型为Gif的附件一 */
MMContent sub1 = MMContent.createFromFile("f://yellow.gif");
sub1.setContentID("1.gif");   //可以不设
sub1.setContentType(MMConstants.ContentType.GIF); /*可以不设,但这个不设的话,
ContentID必须设*/
content.addSubContent(sub1);
/**添加类型为Txt的附件二*/
MMContent sub2 = MMContent.createFromString("This is a Test2!");
sub2.setContentID("2.txt");
sub2.setContentType(MMConstants.ContentType. TEXT);
content.addSubContent(sub2);
/**将附件进行设置*/
submitReq.setContent("多媒体消息的内容"); /*可选,也可以从MM7DeliverReq中获得多
媒体消息的内容,submitReq.setContent(deliverReq.getContent());*/
/*发送MM7SubmitReq消息,正确返回MM7SubmitRes消息,错误返回MM7RSError消息,
其它消息与此类似*/
        MM7RSRes res = mm7Sender.send(submitReq);
        /*可以根据StatusCode来判断本次发送是否成功,若成功能得到MessageID等信息。
StatusCode可能得到的值,具体可见本文中的请求状态码说明。*/
        if(res instanceof  MM7SubmitRes)
{
    MM7SubmitRes submitRes = (MM7SubmitRes)res;
    System.out.println(“StatusCode=”+ submitRes.getStatusCode());
    System.out.println(“StatusText=”+ submitRes.getStatusText());
    System.out.println(“MessageID=”+ submitRes .getMessageID());
     }
    }
    public MM7VASPRes doDeliver(MM7DeliverReq request)
       {
        /*接收从MMSC发过来的传送消息,以便取出其中的部分值构造提交消息或得到一些有用
信息,如MMSC的标识符等*/
        deliverReq = request;
        System.out.println(“收到手机”+request.getSender()
+“提交的消息,标题为:”+request.getSubject());
        System.out.println("MMSC的标识符为:"+request. GetMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7DeliverRes消息,设置ServiceCode或StatusCode
MM7DeliverRes mm7DeliverRes = new MM7DeliverRes();
mm7DeliverRes.setServiceCode("服务代码"); //可选
mm7DeliverRes.setStatusCode(MMConstants.RequestStatus.SUCCESS); /*必备,以便表明
SP已经接收到传送消息。成功可设1000。*/
        mm7DeliverRes.setStatusText("所用状态文本说明"); /*可选*/
        //返回给MM7 API,以便API将MM7DeliverRes返回给MMSC。
return(MM7VASPRes)mm7DeliverRes;
    }
}
4.4 VASP接收状态报告(上行业务)
当VASP在发送MM7SubmitReq给MMSC时设置需要发送状态报告的请求为true时,MMSC在收到MM7SubmitReq后,会发送状态报告给VASP,此时VASP可以进行接收。接收方式和接收传送消息一样,也有两种方式:
4.4.1方式1:普通应用程序中的用法
public class MyReceiver extends MM7Receiver
{
public MM7DeliveryReportReq deliveryReportReq;
    //Main方法
       public static void main(String[]args)
       {
     //初始化VASP
MM7Config mm7Config = new MM7Config(“./config/mm7Config.xml”);
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“../config/ConnConfig.xml”); //必备
//构造MyReceiver
MyReciever receiver = new MyReceiver();
receiver.setConfig(mm7Config); //必备
//启动接收器
receiver.start();
for(;;);
       }
       public MM7VASPRes doDeliveryReport(MM7DeliveryReportReq request)
       {
/*接收从MMSC发过来的状态报告,以便得到一些有用信息,如MMSC的标识符等*/
        deliveryReportReq = request;
        System.out.println(“收到发送方”+request.getSender()
+“提交的消息,其MessageID为:”+request.getMessageID());
        System.out.println("MMSC的标识符为:"+request. getMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7DeliveryReportRes消息,返回给MM7 API
MM7DeliveryReportRes mm7DeliveryReportRes = new MM7DeliveryReportRes ();
mm7DeliveryReportRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请
            求完成状态,必备,以便表明SP已经接收到状态报告。一般设1000。*/
        mm7DeliveryReportRes.setStatusText("所用状态文本说明"); /*设置所用状态的文本说
明,应限定请求状态,可选*/
        //返回给MM7 API,以便API将MM7DeliveryReportRes返回给MMSC。
return(MM7VASPRes) mm7DeliveryReportRes;
    }
}
4.4.2方式2:Web应用程序中的用法
 
public class MyReceiver extends MM7RecieveServlet
{
public MM7VASPRes doDelivery(MM7DeliveryReportReq request)
       {
        /*接收从MMSC发过来的状态报告,以便得到一些有用信息,如MMSC的标识符等*/
        deliveryReportReq = request;
        System.out.println(“收到发送方”+request.getSender()
+“提交的消息,其MessageID为:”+request.getMessageID());
        System.out.println("MMSC的标识符为:"+request. getMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7DeliverReportRes消息,返回给MM7 API
MM7DeliveryReportRes mm7DeliveryReportRes = new MM7DeliveryReportRes ();
mm7DeliveryreportRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请求
完成状态,必备,以便表明SP已经接收到状态报告。一般设1000。*/
        mm7DeliveryReportRes.setStatusText("所用状态文本说明"); /*设置所用状态的文本说
明,应限定请求状态,可选*/
        //返回给MM7 API,以便API将MM7DeliveryReportRes返回给MMSC。
return(MM7VASPRes) mm7DeliveryReportRes;
    }
}
4.5 VASP接收读后回复报告(上行业务)
当VASP在发送MM7SubmitReq给MMSC时设置需要读后回复报告的请求为true时,MMSC在收到MM7SubmitReq后,会发送读后回复报告给VASP,此时VASP可以进行接收。接收方式和接收传送消息以及状态报告一样,也有两种方式:
4.5.1方式1:普通应用程序中的用法
public class MyReceiver extends MM7Receiver
{
public MM7ReadReplyReq readReplyReq;
    //Main方法
       public static void main(String[]args)
       {
     //初始化VASP
MM7Config mm7Config = new MM7Config(“./conf/vasp.xml”);
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“./config/ConnConfig.xml”); //必备
//构造MyReceiver
MyReciever receiver = new MyReceiver();
receiver.setConfig(mm7Config); //必备
//启动接收器
receiver.start();
for(;;);
       }
       public MM7VASPRes doReadReply(MM7ReadReplyReq request)
       {
        /*接收从MMSC发过来的读后回复报告,以便得到一些有用信息,如MMSC的标识符等*/
        readReplyReq = request;
        System.out.println(“收到手机”+request.getSender()
+“的已读消息,其MessageID为:”+request.getMessageID());
        System.out.println("MMSC的标识符为:"+request. getMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7ReadReplyRes消息,返回给MM7 API
MM7ReadReplyRes readReplyRes = new MM7ReadReplyRes ();
readReplyRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请求完成状
态,必备,以便表明SP已经接收到读后回复报告。成功设1000。*/
        readReplyRes.setStatusText("所用状态文本说明"); /*设置所用状态的文本说明,应限
定请求状态,可选*/
        //返回给MM7 API,以便API将MM7ReadReplyRes返回给MMSC。
return(MM7VASPRes) readReplyRes;
    }
}
4.5.2方式2:Web应用程序中的用法
public class MyReceiver extends MM7RecieveServlet
{
    public MM7VASPRes doReadReply (MM7ReadReplyReq request)
       {
        /*接收从MMSC发过来的读后回复报告,以便得到一些有用信息,如MMSC的标识符等*/
        readReplyReq = request;
        System.out.println(“收到手机”+request.getSender()
+“的已读消息,其MessageID为:”+request.getMessageID());
        System.out.println("MMSC的标识符为:"+request. getMMSRelayServerID()) ;
        //SP需要进行一些处理,例如构建MM7ReadReplyRes消息,返回给MM7 API
MM7ReadReplyRes readReplyRes = new MM7ReadReplyRes ();
readReplyRes.setStatusCode(MMConstants.RequestStatus.SUCCESS) ;/*设置请求完成状
态,必备,以便表明SP已经接收到读后回复报告。成功设1000。*/
        readReplyRes.setStatusText("所用状态文本说明");  /*设置所用状态的文本说明,应限
定请求状态,可选*/
        //返回给MM7 API,以便API将MM7ReadReplyRes返回给MMSC。
return(MM7VASPRes) readReplyRes;
    }
}
4.6 发送取消消息(下行业务)
当VASP发送MM7SubmitReq消息给MMSC成功后,VASP可以发送取消消息,以取消之前所发送给MMSC的消息。具体构建取消消息见4.2.2.2。
 
package com.cmcc.mm7.vasp.conf;
 
import com.cmcc.mm7.vasp.message.*;
import com.cmcc.mm7.vasp.service.MM7Sender;
import com.cmcc.mm7.vasp.common.*;
import java.io.*;
 
public class VaspSendTest {
public static void main(String[] args) {
       MM7Config mm7Config = new MM7Config("../config/mm7Config.xml");
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“../config/ConnConfig.xml”);
       MM7Sender mm7Sender = new MM7Sender(mm7Config);
              MM7CancelReq cancelReq = new MM7CancelReq();
           cancel.setTransactionID("关联标识");       
              //从MM7SubmitRes中获得MessageID
              cancelReq.setMesageID(“待取消的消息的标识符”);
       MM7RSRes res = mm7Sender.send(cancelReq);
       System.out.println("res.statuscode=" + res.getStatusCode() +
                           ";res.statusText=" + res.getStatusText());
       }
}
 
4.7 发送替换消息(下行业务)
当VASP发送MM7SubmitReq消息给MMSC成功后,VASP可以发送替换消息,以替换之前所发送给MMSC的消息。具体构建替换消息见4.2.2.3。
package com.cmcc.mm7.vasp.conf;
 
import com.cmcc.mm7.vasp.message.*;
import com.cmcc.mm7.vasp.service.MM7Sender;
import com.cmcc.mm7.vasp.common.*;
import java.io.*;
 
public class VaspSendTest {
public static void main(String[] args) {
       MM7Config mm7Config = new MM7Config("./config/mm7Config.xml");
//设置ConnConfig.xml文件的路径
mm7Config.setConnConfigName(“./config/ConnConfig.xml”);
       MM7Sender mm7Sender = new MM7Sender(mm7Config);
              MM7ReplaceReq replace = new MM7ReplaceReq();
        replace.setTransactionID("关联标识");
              //从MM7SubmitRes中获得MessageID
              replace.setMessageID("被当前消息所替换的消息的标识符");
              //创建消息内容体
        MMContent content = new MMContent();
        content.setContentType(MMConstants.ContentType.MULTIPART_MIXED);
        MMContent sub1 = MMContent.createFromString("This is a test11");
        sub1.setContentID("1.txt");
        content.addSubContent(sub1);
        MMContent sub2 = MMContent.createFromString("This is a Test22");
        sub2.setContentID("2.txt");
        content.addSubContent(sub2);
        replace.setContent(content);
       MM7RSRes res = mm7Sender.send(replace);
       System.out.println("res.statuscode=" + res.getStatusCode() +
                           ";res.statusText=" + res.getStatusText());
       }
}
5.开发过程中需用的一些Status解释
5.1 关于StatusCode和StatusText的解释
当VASP收到MMSC发送过来的DeliverReq、DeliverReportReq、ReadReplyReq时,可以经过判断后,返回给MMSC一个状态码和状态描述,可以返回的StatusCode和StatusText分别如下,同样当VASP收到MMSC返回的SubmitRes、CancelRes、ReplaceRes、RSErrorRes时,可能得到的StatusCode和StatusText分别如下:
1000 : 成功;
1001 : 部分成功;
2000 : 客户机错误;
2001 : 操作受限;
2002 : 地址错误;
2003 : 找不到地址;
2004 : 多媒体内容被拒绝;
2005 : 找不到消息ID;
2006 : 找不到链接ID;
2007 : 消息格式破坏;
3000 : 服务器错误;
3001 : 不可接受;
3002 : 消息被拒绝;
3003 : 不支持多个地址;
4000 : 一般服务错误;
4001 : 标识不正确;
4002 : 版本不支持;
4003 : 操作不支持;
4004 : 验证错误;
4005 : 服务错误;
4006 : 无法提供服务;
4007 : 服务被拒绝;
 
5.2关于VASP收到DeliveryReportreq中MMStatus的解释
VASP收到DeliveryReportReq消息后,其中有个MMStatus字段值,是个byte型,因此说明一下具体数字所表示的含义:
0 :过期;
1 :接收;
2 :系统拒绝;
3 :用户拒绝;
4 :未知;
5 :转发;
 
5.3 关于VASP收到ReadReplyReq中ReadStatus的解释
VASP收到ReadReplyReq消息后,其中有个ReadStatus字段值,是个byte型,因此说明一下具体数字所表示的含义:
0 :已读取;
1 :未读被删;
2 :未知;
6.获取MM7 API版本信息的方法
VASP要想获得自己当前使用的API的版本号,首先在环境变量中设置mm7api.jar包存放的路径,然后点击开始菜单的运行,输入cmd进入Dos 窗口,敲命令:
 E:/> java com.cmcc.mm7.vasp.common.RetriveApiVersion 回车
可以看到打印信息如下:
当前使用的MM7 API的版本为:V1.5.1_20040512
 
7. MM7 API返回StatusCode说明
-100:系统错误;
-101:超时发送失败;
-102:接收失败;
-103:没有返回正确的消息;
-104:Socket不通;
-105:待发送的消息为空;
-106:发送消息不正确;
-107:接收消息为空;
-108:Bad Request;
-109:XML解析错误;
-110:Server Could not fulfill the request
-113:消息内容的尺寸超出允许发送的大小

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/youyu_wangzi/archive/2006/11/01/1359793.aspx

中国移动MM7 API用户手册相关推荐

  1. 中国移动MM7 API用户手册(四)

    2.7递送报告 报告是接收方(终端)对接收到消息的处理方式信息.递送报告指MMSC在获取这个报告后把这个信息发送给发送方(SP).接收方对消息的处理可能是接收或者拒绝等.处理流程如下: l       ...

  2. 中国移动MM7 API用户手册(二)

    1.概述 该文档说明了SP如何使用中国移动集团公司的MM7 API程序与彩信中心进行对接,实现MM7接口的通讯,开发增值业务应用. 该MM7 API是使用纯Java开发的,使用的JDK的版本为JDK1 ...

  3. 中国移动MM7 API用户手册(七)

    4.4  VASP接收状态报告(上行业务) 当VASP在发送MM7SubmitReq给MMSC时设置需要发送状态报告的请求为true时,MMSC在收到MM7SubmitReq后,会发送状态报告给VAS ...

  4. 中国移动MM7 API用户手册(五)

    4.1.2 方式2:Web应用程序中的用法 public class MyReceiver extends MM7RecieveServlet { public MM7VASPRes doDelive ...

  5. 手机计算机用户使用说明书模板,中国移动家庭宽带用户手册范本.doc

    .. 完美格式可编辑版 中国移动家庭宽带用户手册 中国移动家庭宽带用户手册 TOC \o "1-3" \h \z \u HYPERLINK \l "_Toc2833888 ...

  6. 蓝杰MM7协议彩信网关

    一.MMS概述     近几年来,随着手机用户的不断增加,短信业务随之火爆,逐渐成为人们交流信息的一种重要渠道.中国移动趁热打铁推出了移动梦网,通过互联网使短信业务进一步得到了长足的发展.去年中国移动 ...

  7. HTTP API接口规范

    1 概述 本文档简要介绍了一些 HTTP + JSON 的 API 设计实践. 1.1 名词 简称 全称 备注 HTTP Hyper Text Transfer Protocol 超文本传输协议 HT ...

  8. Node.js中使用百度统计API统计站点的访问量、访客数、IP数相关信息

    详情访问:详情 欢迎来我的个人网站:TanJia 今天,在个人网站的关于版块,添加了本站点的总访问量.总访客数以及当日的访问量等相关信息.使用的是百度统计的相关API. 首先,我们需要在百度统计中开通 ...

  9. 移动增值业务平台解决实例

    摘 要 J2EE为WEB应用提供了多层次的结构体系,而在传统软件(非Web 应用),如何建立合理的.灵活的结构体系,是本文的主要目的.本文基于一个分布式中间件开发工具– SoftEngine, 以移动 ...

  10. php函数 chm,php函数手册chm最新

    c 语言常用函数手册 chm 格式 /... PHP GD函数库_计算机软件及应用_IT/计算机_专业资料.GD 函数库 一. 安装 GD 库 1. 编辑 PHP 配置文件-php.ini 2. 启用 ...

最新文章

  1. 请把我不会,换成我可以学
  2. sqoop将关系型数据库的表导入hive中
  3. Spring来装配组件
  4. mongodb授权登录,经过自己修改后的授权登录方式
  5. 巨蟒python全栈开发-第11阶段 ansible_project2
  6. [Java基础]Stream流的收集操作
  7. 非递归实现二叉树(前序,中序,后序)c/c++实现
  8. Linux 基本操作--文件查看 (day3)
  9. enumerate_Java Thread类的static int enumerate(Thread [] th)方法与示例
  10. 打扰了!MacBook Pro 16英寸国行版正式开售:顶配46421元
  11. 交互式 shell 玩转 Python
  12. flume与log4j的整合
  13. 租房管理系统毕业设计Java_java毕业设计_springboot框架的租房管理系统
  14. 《SVN web管理工具CollabNetSubversionEdge》
  15. 5个不为人知的音乐网站,全网音乐免费听!说什么也不能错过
  16. chrome 谷歌idm视频下载插件
  17. ddos源码 ntp_了解NTP DDOS攻击原理
  18. 怎么修改扫描PDF?扫描件PDF修改编辑教程
  19. spring cloudAlibaba gateway网关报错,显示无法找到注册中心注册自己。
  20. 2016 GitHub章鱼猫观察报告之开源统计

热门文章

  1. C语言之取反和取相反数
  2. 数据挖掘案例(2):用户画像
  3. 三大框架 —— 持久层框架MyBatis
  4. linux系统共享文件夹,Linux系统如何设置共享文件夹?新建文件夹以及指令是什么?...
  5. 用html做一个图表,04做一个简单的图表.html
  6. ZZULIOJ 1050~1059(oj入门题)
  7. 技术分享PPT整理(一):Bootstrap基础与应用
  8. 可实现ffmpeg转码的cuda显卡
  9. LEACH协议网络性能分析
  10. UE4 挂载在Actor上的ParticleSystem特效无法与Actor的RootComponent对齐的问题