java协议
㈠ SMPP协议java如何写
SMPP协议
3.1SMPP规范简介
SMPP接口协议最初由ETSI收录在GSM03.39规范中,描述了短消息中心与短消息实体之间通信交互的协议关系及数据传输格式,本规范对SMPP接口协议的描述主要面向简单的通信交互,制定规范的厂家将其协议版本号定为V3.30;后由SMPP开发者论坛将协议版本向前演进为V3.40,SMPPV3.40协议规范完全兼容GSM03.39协议标准。本规范中,所采用的短消息中心设备与短消息股票交易业务处理平台之间的接口采用GSM03.39V3.30协议规范,如无特殊说明全部以此协议规范为准。SMPP协议可以以TCP/IP或X.25作为底层通讯承载。
与SMPP协议规范相关的参考资料如下:
1、 《GSM 03.39(Version 5.0.0)》:European digital cellular telecommunications system(Phase 2);Interface protocols for the connection of Short Message Service Centres(SMSCs)to Short Message Entities(SMEs);
2、 《GSM 03.39(Version 6.0.0)》:European digital cellular telecommunications system(Phase 2+);Interface protocols for the connection of Short Message Service Centres(SMSCs)to Short Message Entities(SMEs);
3、 《GSM 03.40(Version 4.8.1):European digital cellular telecommunications system(Phase 2);Technical realization of the Short Message Service Point to Point》
4、 《GSM 03.38(Version 5.2.0):Digital cellular telecommunications system(Phase 2+);Alphabets and language_specific information》
5、 《GSM 03.47(Version 5.0.0):Digital cellular telecommunications system;Example protocol stacks for interconnecting Service Center(SC) and Mobile_services Switching Center(s)(MSC)》
6、 《900/1800 MHz 数字蜂窝移动通信系统短消息中心设备规范(第一分册点对点短消息业务)》
缩略语
SME 短消息实体
SMPP 短消息点对点协议
SMSC 短消息服务中心
ESME 扩展短消息实体
3.2系统结构、功能概述
通过SMPP,ESME(例如寻呼台、语音邮箱系统、股票交易业务处理平台等)能连接(Bind)或断连(UnBind)短消息中心,提交(Submit)短消息或从短消息中心下发(Deliver)。
此协议包含以下两部分:
*(协议)ESME到SMSC的消息
*(协议)SMSC到扩展ESME的消息
其中用户管理部分只适用于SMSC有用户数据库支持的情况
SMSC和ESME之间的关系如下图所示:
图3-1:SMSC和ESME连接的短消息系统网络
3.3消息协议
按短消息信息的流向,可以将ESME与SMSC之间的短消息信息分为两类:1、从SMSC到ESME的消息;2、从ESME到SMSC的消息。对于所有请求消息,无论始发于ESME还是SMSC,都必须产生一个响应消息(acknowledge)。
从ESME到SMSC所提交的消息,可能有两种响应:
*SMSC收到消息的响应(ACK)
*如果这条短消息设置了需要状态报告,那么当这条短消息到达目标地之后,SMSC会产生一个状态报告的消息给ESME。
.1 SMSC到ESME的消息
以下消息是从SMSC到ESME的消息
命令
描述
bind_receiver_resp
bind_receiver的响应,status表示连接成功与否
bind_transmitter_resp
bind_transmitter的响应,status表示连接成功与否
unbind_resp
unbind的响应,status表示断开连接成功与否
submit_sm_resp
submit_sm的响应,status表明提交短消息是否成功
deliver_sm
SMSC下发短消息到ESME
enquire_link_resp
Enquire_link的响应
generic_nak
表示消息头有错误的响应
.2 ESME到SMSC的消息
以下为ESME到SMSC的消息
命令
描述
bind_receiver
短消息实体(ESME/SME)作为服务器与短消息中心(SMSC)建立连接,本连接建立起来后,允许短消息实体接受短消息中心下发的短消。
bind_transmitter
短消息实体(ESME/SME)作为客户端与短消息中心(SMSC)建立连接,本连接建立起来后,允许短消息实体向短消息中心提交短消息。
Unbind
短消息实体(ESME/SME)与短消息中心系统(SMSC)断开会话连接。
submit_sm
ESME提交短消息到SMSC,以便SMSC下发此短消息到指定的移动台。
deliver_sm_resp
deliver_sm的响应。status表示此次下发是否成功。
Enquire_link
短消息实体向短消息中心发起的连路保持查询请求,以保证通讯链路的畅通。一般情况下约每5秒发送一次ENQUIRE_LINK消息。
Generic_nak
表示消息头有错误的响应
3.4消息语法
3.4.1语法定义规则
在以下语法说明中,遵从以下规则:
A.未使用的字段,依据类型必须设置为0或NULL。
B.消息由消息头和消息体组成
C.状态(status)如在命令语法中未加说明
0:表示成功
非0:表示失败
<0x80000000:未定义值保留
D.在类型中,可能用到以下定义
l integer :一定字节数所组成的整数,高位在前,低位在后。例如:1字节(BYTE),2字节(WORD ) , 4字节(DWORD)。
l C_String :以NULL结束的ASCII字符串
l C_DecString :以NULL结束的ASCII字符串,它由一系列的10进制字符组成(‘0’---‘9’)。
l C_OctetString :由任意8位字节组成数据流串。
l C_HexString :以NULL结束的ASCII字符串,它由一系列的16进制字符组成(‘0’---‘9’,‘A’(‘a’)---‘F’(‘f’))
l C_StringTime :表示时间的字符串,它为以下格式 “YYMMDDhhmmsstnnp" ,格式如下
说明
YY'
年份的最后2位 (00-99)
MM
月份(01-12)
DD
日 (01-31)
Hh
小时 (00-23)
Mm
分 (00-59)
Ss
秒 (00-59)
T
十分之一秒 (0-9)
Nn
与UTC (Universal Time Constant) 时间超前或落后的差距(00-48).
‘+’(p)
时间超前于UTC time.
‘-’(p)
时间落后于 UTC time.
l C_UnicodeString :Unicode编码的字符串。
3.4.2消息头语法
字段
长度(字节)
类型
Command Length
4
Integer
Command ID
4
Integer
Command_status
4
Integer
Sequence No.
4
Integer
Optional Message Body
可变
混合
具体字段描述说明:
l Command Length:整个包的长度(包括该字段本身)。
l Command ID :这个字段表明该条短消息的类型,相当于标识符。例如ESME_SUB_SM表示此消息为ESME向SMSC提交短消息。当该标识符表示该条消息是请求消息(request)时,标识符的保留取值范围是0h到FFh。当该标识符表示该条消息是应答消息(response)时,标识符的保留取值范围是080000000h到0800000FFh。一般来说,应答消息的类型对应相应的请求消息的类型,所不同的是,应答消息的类型在第31位比特处是置位的。
Command ID命令取值:
Command ID 编码
Command ID
描述
Command ID取值
ESME_BNDRCV
bind_receiver
ESME要求以接收者身份连接到SMSC
0X00000001
ESME_BNDRCV_RESP
bind_receiver_resp
bind_receiver的响应
0X80000001
ESME_BNDTRN
bind_transmitter
ESME要求以发送者身份连接到SMSC
0X00000002
ESME_BNDTRN_RESP
bind_transmitrer_resp
bind_transmitter的响应
0X80000002
ESME_UBD
Unbind
ESME要求断开连接到SMSC
0X00000006
ESME_UBD_RESP
Unbind_resp
Unbind的响应
0X80000006
ESME_SUB_SM
Submit_sm
ESME提交短消息到SMSC
0X00000004
ESME_SUB_SM_RESP
Submit_sm_resp
submit_sm的响应
0X80000004
SMSC_DELIVER_SM
Deliver_sm
SMSC下发短消息到ESME
0X00000005
SMSC_DELIVER_SM_RESP
Deliver_sm_resp
deliver_sm的响应
0X80000005
ESME_QRYLINK
Enquire_link
ESME询问与SMSC的连接情况
0X00000015
ESME_QRYLINK_RESP
Enquire_link_resp
enquire_link的响应
0X80000015
ESME_NACK
Nack
表示消息头有错误的响应
0X80000000
l Command Status :此字段表示一个请求消息的成功与失败,如失败,指示引起失败的错误类型等信息。该字段只用在应答消息中,在请求消息中,该字段必须为NULL。
Command Status取值说明 :
错误代码
错误值
描述
E_SUCCESS
0X00000000
成功
E_OTHERERR
0X00000001
其他错误
0X00000002 – 0X0000000F
保留给SMSC厂商定义错误
E_MSGLENERR
0X00000010
消息长度错误
E_CMDLENERR
0X00000011
命令长度错误
E_INVLDCMDID
0X00000012
消息ID无效
E_NORIGHT(0X00000013)
0X00000013
没有执行此命令的权限
0X00000014 – 0X0000001F
保留
E_INVLDSYSTEMID
0X00000020
无效的SYSTEMID
E_INVLDPASSWORD
0X00000021
无效的密码
E_INVLDSYSTEMTYPE
0X00000022
无效的SYSTEMTYPE
0X00000023 – 0X0000003F
保留
E_ADDRERR
0X00000040
地址错误
E_MOEXCEED
0X00000041
超过最大提交数
E_MTEXCEED
0X00000042
超过最大下发数
E_INVLDUSER
0X00000043
无效的用户
E_INVLDDATAFMT
0X00000044
无效的数据格式
E_CREATEMSGFAILURE
0X00000045
创建消息失败
E_INVLDMSGID
0X00000046
无效的短消息ID
E_DATABASEFAILURE
0X00000047
数据库失败
E_CANCELMSGFAILURE
0X00000048
取消消息失败
E_MSGSTATEERR
0X00000049
短消息状态错误
E_REPLACEMSGFAILURE
0X0000004A
替换消息失败
E_INVLDRPLADDR
0X0000004B
替换消息源地址错误
0X0000004C – 0X0000005F
保留
E_INVLDORGTON
0X00000060
无效的源地址TON
E_INVLDORGNPI
0X00000061
无效的源地址NPI
E_ORGADDRERR
0X00000062
源地址错误
E_INVLDDESTTON
0X00000063
无效的目的地址TON
E_INVLDDESTNPI
0X00000064
无效的目的地址NPI
E_DESTADDRERR
0X00000065
目的地址错误
E_INVLDSCHEDULE
0X00000066
无效的定时时间
E_INVLDEXPIRE
0X00000067
无效的超时时间
E_INVLDESM
0X00000068
无效的ESM_CALSS
E_INVLDUDLEN
0X00000069
无效的UDLEN
E_INVLDPRI
0X0000006A
无效的PRI
E_INVLDRDF
0X0000006B
无效的Registered_delivery_flag
E_INVLDRPF
0X0000006C
无效的Replace_if_present_flag
0X0000006D – 0X0000007F
保留
用户管理部分(可选)
E_USERALREADYEXIST
0X00000080
指定用户已经存在
E_CREATEUSERERR
0X00000081
创建用户失败
E_USERIDERR
0X00000082
用户ID错误
E_USERNOTEXIST
0X00000083
指定用户不存在
0X00000084 – 0X0000008F
保留
0X00000090 – 0X00000FFF
保留给SMSC厂商定义错误
其他
保留
l Sequence No .:此字段表示消息的序列号,它由ESME产生,它是消息和它的应答之间的对应标志,数值在01h到07FFFFFFFh间。对于每条请求消息,该字段的取值必须保证严格单调递增,当序列号值达到最大值时,返回继续从01h开始。
l Optional Message Body:此字段表示短消息的消息体部分,在移动股票交易应用中承载STK卡应用协议内容。
3.4.3各命令消息体具体格式
1、generic_Nak命令
此命令用于当接收消息头有错误的时候的响应,该响应只能由收到请求方发出。该命令只有消息头,没有消息体。
2、BIND_RECEIVER命令
在扩展短消息实体和短消息中心之间建立虚连接,接收SMSC转发的短消息。
字段
长度(字节)
类型
System_id
最大 16
C_String
Password
最大 9
C_String
System_type
最大 13
C_String
Interface_version
1
Integer
Addr_ton
1
Integer
Addr_npi
1
Integer
Address_range
最大 41
C_DecString
具体字段描述说明:
system_id :该字段是系统登录到短消息中心所用的接口号。
Password :该字段是系统登录到短消息中心所用的密码。
system_type :该字段标明登录的接口类型。
interface_version :该字段标明登录的接口版本号。
addr_ton :该字段指明编码类型。如不需要,可设为NULL。取值说明:
0 未知,当用户或网络不含关于编码方案的较早信息
1 国际号码,
2 国内号码
3 网络特殊号码
4 用户号码
5 字符数字
6 缩写号码
7 保留
addr_npi :该字段指明编码方案。如不需要,可设为NULL。取值说明:
0 未知
1ISDN或电话号码编码方案(E164/E163),对于任意实体SC,MSC或MS,都有效
2 保留
3 数据编码方案(X121)
4 电报编码方案
5-7 保留
8 国内编码方案
9 私有编码方案
10 ERMES编码方案(ETSI DE/PS 3 01-3)
11-15 保留
address_range :该字段用来给短消息指明路由,和将状态报告转发给ESME。如不需要,可设置为NULL。
3、BIND_RECEIVER_RESP语法
此命令用于对MI_BIND_RECEIVER响应。
字段
大小(字节)
类型
System_id
最大 16
C_String
㈡ 请帮忙用java socket写个通信类,通信协议是如下,谢谢!
这个协议要花很久时间的,估计在网络知道没人会给你做出来
不过这个 不是什么难东西 懂得基础的socket知识即可 至少稍微有些繁琐罢了
加油
㈢ JAVA语言支持哪些协议 各协议对JAVA具体的用途
协议最主要用于通信,通信双方必须遵守协议才能进行正常通信。
可以用生活中的寄信来类比。寄信方必须写明收信方的地址及收信人姓名,并且把信件放到信封中贴上邮票投递到邮箱中,收信人才能收到此信件。收信方必须到邮箱中才能收取信件。这种对通信双方的约束规则,便是协议!
例如Http协议,它规定了浏览器应该以什么样的格式且怎样发送请求和接受响应,同时也规定了服务器应该怎么样解析浏览器发来的请求并且作出响应。在Http协议的约束下,不同的浏览器才能和不同的服务器实现正常通信!
㈣ java中http协议能否转化为tcp协议,若能,如何转化
服务端监听:ServerSocket server=new ServerSocket(port);//port:绑定的端口号
Socket client=server.accept();//监听端口,一旦取得连接则获得客户端的socket连接对象client
客户端: Socket s=new Socket(ip,port);//要连接的服务器的ip以及端口号
如果正常连接上之后,socket的对象可以获得InputStream和OutputStreame,然后就可以进行通信了
完成通信之后,执行socket对象的close()方法关闭连接,完成一次完整的socket连接
㈤ Java中怎么注册协议
注册协议
URL的static URLStreamHandler getURLStreamHandler(String protocol) 方法用于获取获取协议处理类
URL提供了两种注册协议的途径。
1)设置URLStreamHandlerFactory,2)设置jvm启动参数java.protocol.handler.pkgs。
两者可以同时使用。
设置URLStreamHandlerFactory
URL的方法
public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac) {
synchronized (streamHandlerLock) {
if (factory != null) {
throw new Error("factory already defined");
}
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkSetFactory();
}
handlers.clear();
factory = fac;
}
}
public interface URLStreamHandlerFactory {
URLStreamHandler createURLStreamHandler(String protocol);
}
整个jvm只能设置一次,再次设置不起作用。调用URL.setURLStreamHandlerFactory(fac)。
一般是在服务器的代码中设置,比如tomcat,jboss ,was等,用于注册服务器自己的协议,应用级没法设置,因为服务器已经设置过了,应用即使设置了也不起作用。
启动参数-Djava.protocol.handler.pkgs
通过-Djava.protocol.handler.pkgs=cn.ccb.wfcp注册自定义协议的包。要求协议处理类的类名必须是Handler,包名的最后是协议名。示例如下,定义了brules协议。
package cn.ccb.wfcp.brules;
public class Handler extends URLStreamHandler {
如果要定义多个协议包就用"|"分割,比如-Djava.protocol.handler.pkgs=cn.ccb.wfcp|cn.ccb.wfcp22.
jvm内置的协议也是按照上面的方式定义的,但不用通过-Djava.protocol.handler.pkgs注册,而是将内置的协议包拼接到后面。内置协议都在sun.net.www.protocol包下面。
获取到Handler类名后去加载class。Class cls = null;
try {
cls = Class.forName(clsName);
} catch (ClassNotFoundException e) {
ClassLoader cl = ClassLoader.getSystemClassLoader();
if (cl != null) {
cls = cl.loadClass(clsName);
}
}
if (cls != null) {
handler =
(URLStreamHandler)cls.newInstance();
}
㈥ java现在是什么使用协议
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一。如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的。本文会介绍一下基于TCP/IP的Socket编程,并且如何写一个客户端/服务器程序。
方法/步骤
Java中的socket编程 下面的部分将通过一些示例讲解一下如何使用socket编写客户端和服务器端的程序。 注意:在接下来的示例中,我将使用基于TCP/IP协议的socket编程,因为这个协议远远比UDP/IP使用的要广泛。并且所有的socket相关的类都位于java.net包下,所以在我们进行socket编程时需要引入这个包。
写入数据 接下来就是写入请求数据,我们从客户端的socket对象中得到OutputStream对象,然后写入数据后。很类似文件IO的处理代码。
打开服务器端的socket
读取数据 通过上面得到的socket对象获取InputStream对象,然后安装文件IO一样读取数据即可。这里我们将内容打印出来。
使用socket实现一个回声服务器,就是服务器会将客户端发送过来的数据传回给客户端。
㈦ Java 怎么操作网络协议的
<pre t="code" l="java">private void postData(String url, String data) throws Exception {
URL url = new URL(url);
URLConnection urlConnection = url.openConnection();
urlConnection.setDoOutput(true);
// 提交数据
try (PrintWriter pw = new PrintWriter(urlConnection.getOutputStream(), true)) {
pw.write(data);
}
// 获得返回结果
try (BufferedReader br = new BufferedReader(
new InputStreamReader(urlConnection.getInputStream(), "UTF-8"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}这是当初我登录我们学校校园网的代码(基于 JDK7),参数 url 是你登录的起始网址(就是让你输入用户名和密码的那个,参数 data 是要提交的数据,就是形如 username=xxxpassword=yyyaction=login 这样的格式。你可以自己先使用浏览器通过“审查元素”,然后再控制台看一下登录的时候到底需要提交哪些字段。
㈧ java多种协议网络通讯 如何封装
网络通讯与UI层中间在加一个层,这个层就封装所要调用的接口,以统一协议的接口暴露给UI层,这样如果网络通讯接口变了,就改中间的那个层就行了。
㈨ 用的java,通信协议中上下行报文是什么意思
报文:通讯中发送的数据包。
上行:常指从客户端发送至服务器端。
下行:常指从服务器端发送回客户端。