當前位置:首頁 » 編程語言 » java協議

java協議

發布時間: 2022-01-14 21:46:59

㈠ 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,通信協議中上下行報文是什麼意思

報文:通訊中發送的數據包。

上行:常指從客戶端發送至伺服器端。
下行:常指從伺服器端發送回客戶端。

熱點內容
解壓游戲香皂 發布:2024-12-22 16:49:29 瀏覽:352
新預演算法的亮點 發布:2024-12-22 16:36:30 瀏覽:959
linux命令行快捷鍵 發布:2024-12-22 16:33:27 瀏覽:10
淘寶網怎麼上傳寶貝 發布:2024-12-22 16:30:53 瀏覽:753
伺服器gps是什麼意思 發布:2024-12-22 16:10:43 瀏覽:996
iqoo安卓11變聲器在哪裡 發布:2024-12-22 15:46:45 瀏覽:252
ie鎖定初始密碼在哪裡找 發布:2024-12-22 15:44:48 瀏覽:296
linuxtcp窗口 發布:2024-12-22 15:34:24 瀏覽:948
安卓官翻機和原裝有什麼區別 發布:2024-12-22 15:34:24 瀏覽:662
linux掛載的磁碟 發布:2024-12-22 15:34:23 瀏覽:234