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,通信協議中上下行報文是什麼意思
報文:通訊中發送的數據包。
上行:常指從客戶端發送至伺服器端。
下行:常指從伺服器端發送回客戶端。