導航:首頁 > 編程語言 > java通信協議解析代碼

java通信協議解析代碼

發布時間:2023-02-03 17:14:24

Ⅰ Android socket通信協議的封裝和解析

android socket通信協議的封裝和解析,其實是和java一樣的,都是通過http中的相關知識來封裝和解析,主要是通過多次握手,如下代碼

importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.io.PrintWriter;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;


publicclassMain{
privatestaticfinalintPORT=9999;
privateList<Socket>mList=newArrayList<Socket>();
privateServerSocketserver=null;
=null;//threadpool

publicstaticvoidmain(String[]args){
newMain();
}
publicMain(){
try{
server=newServerSocket(PORT);
mExecutorService=Executors.newCachedThreadPool();//createathreadpool
System.out.println("伺服器已啟動...");
Socketclient=null;
while(true){
client=server.accept();
//把客戶端放入客戶端集合中
mList.add(client);
mExecutorService.execute(newService(client));//
}
}catch(Exceptione){
e.printStackTrace();
}
}
{
privateSocketsocket;
privateBufferedReaderin=null;
privateStringmsg="";

publicService(Socketsocket){
this.socket=socket;
try{
in=newBufferedReader(newInputStreamReader(socket.getInputStream()));
//客戶端只要一連到伺服器,便向客戶端發送下面的信息。
msg="伺服器地址:"+this.socket.getInetAddress()+"cometoal:"
+mList.size()+"(伺服器發送)";
this.sendmsg();
}catch(IOExceptione){
e.printStackTrace();
}

}

@Override
publicvoidrun(){
try{
while(true){
if((msg=in.readLine())!=null){
//當客戶端發送的信息為:exit時,關閉連接
if(msg.equals("exit")){
System.out.println("ssssssss");
mList.remove(socket);
in.close();
msg="user:"+socket.getInetAddress()
+"exittotal:"+mList.size();
socket.close();
this.sendmsg();
break;
//接收客戶端發過來的信息msg,然後發送給客戶端。
}else{
msg=socket.getInetAddress()+":"+msg+"(伺服器發送)";
this.sendmsg();
}
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*循環遍歷客戶端集合,給每個客戶端都發送信息。
*/
publicvoidsendmsg(){
System.out.println(msg);
intnum=mList.size();
for(intindex=0;index<num;index++){
SocketmSocket=mList.get(index);
PrintWriterpout=null;
try{
pout=newPrintWriter(newBufferedWriter(
newOutputStreamWriter(mSocket.getOutputStream())),true);
pout.println(msg);
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}

Ⅱ java如何編寫通信協議給小例子

通信協議說實在的,簡單的理解就是雙方約定好的一種接頭口號,一般是服專務器短接受到屬他認可的頭部head,才開始已個會話。當然,這個過程確實是用socket實現的,如果你要了解更加底層,可以去看看鏈路協議等。

Ⅲ 用java編寫的串口通信,上位機發送和接收顯示的數據都要是16進制的,求方法代碼

需要幫你做嗎

Ⅳ java 實現modbus-tcp協議的實現代碼,即用java 實現modbus-tcp協議,然後通過網路通信,而非串口通信

請問一下 能請教一下您是如何使用java實現modbus tcp協議的嗎?因為我正在研究這個 不是很明白

Ⅳ 怎麼按照自定義協議用java解析進行遠程通信

很簡單的, 首先使用io框架, netty, mina 都行。
打開socket , 就可以收發數據了。
接來下選擇序列化框架,這取決於你的協議類型。文本協議? 位元組協議?
文本協議: 比如 json? 那就用fast-json,jackson等來講對象序列化和反序列化。
位元組協議:使用 magic-byte; java-struct之類的框架來進行序列化和反序列化。

能傳輸, 能序列化/反序列化。 OKK 問題全部解決。 哈哈哈

Ⅵ JAVA Rs232通訊協議問題

你好!剛才回答有誤!

0x32 也就是 10進制的內 50 ,對應的容ASC碼是50,也就是數字的 2

0x30 也就是 10進制的 48 ,對應的ASC碼是48,也就是數字的 0


給你一個碼表,你看看吧,注意紅圈的地方

Ⅶ TCP/IP協議 怎麼用JAVA發送和接收二進制數據 要具體實例

1.TCP/IP協議要求信息必須在塊(chunk)中發送和接收,而塊的長度必須是8位的倍數,因此,我們可以認為TCP/IP協議中傳輸的信息是位元組序列。如何發送和解析信息需要一定的應用程序協議。

2.信息編碼:

首先是Java里對基本整型的處理,發送時,要注意:1)每種數據類型的位元組個數;2)這些位元組的發送順序是怎樣的?(little-endian還是
big-endian);3)所傳輸的數值是有符號的(signed)還是無符號的(unsigned)。具體編碼時採用位操作(移位和屏蔽)就可以了。
具體在Java里,可以採用DataOutputStream類和ByteArrayOutputStream來實現。恢復時可以採用
DataInputStream類和ByteArrayInputStream類。

其次,字元串和文本,在一組符號與一組整數之間的映射稱為編碼字元集(coded character
set)。發送者與接收者必須在符號與整數的映射方式上達成共識,才能使用文本信息進行通信,最簡單的方法就是定義一個標准字元集。具體編碼時採用
String的getBytes()方法。

最後,位操作。如果設置一個特定的設為1,先設置好掩碼(mask),之後用或操作;要清空特定一位,用與操作。

3.成幀與解析

成幀(framing)技術解決了接收端如何定位消息的首位位置的問題。

如果接收者試圖從套接字中讀取比消息本身更多的位元組,將可能發生以下兩種情況之一:如果信道中沒有其他消息,接收者將阻塞等待,同時無法處理接收
到的消息;如果發送者也在等待接收端的響應消息,則會形成死鎖(dealock);另一方面,如果信道中還有其他消息,則接收者會將後面消息的一部分甚至
全部讀到第一條消息中去,這將產生一些協議錯誤。因此,在使用TCP套接字時,成幀就是一個非常重要的考慮因素。

有兩個技術:

1.基於定界符(Delimiter-based):消息的結束由一個唯一的標記(unique
marker)指出,即發送者在傳輸完數據後顯式添加的一個特殊位元組序列。這個特殊標記不能在傳輸的數據中出現。幸運的是,填充(stuffing)技術
能夠對消息中出現的定界符進行修改,從而使接收者不將其識別為定界符。在接收者掃描定界符時,還能識別出修改過的數據,並在輸出消息中對其進行還原,從而
使其與原始消息一致。

2.顯式長度(Explicit length):在變長欄位或消息前附加一個固定大小的欄位,用來指示該欄位或消息中包含了多少位元組。這種方法要確定消息長度的上限,以確定保存這個長度需要的位元組數。

介面:

Java代碼 import java.io.IOException; import java.io.OutputStream; public interface Framer { void frameMsg(byte [] message,OutputStream out) throws IOException; byte [] nextMsg() throws IOException; }
定界符的方式:

Java代碼 import java.io.ByteArrayOutputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class DelimFramer implements Framer { private InputStream in;//data source; private static final byte DELIMTER=(byte)'\n';//message delimiter public DelimFramer(InputStream in){ this.in=in; } @Override public void frameMsg(byte[] message, OutputStream out) throws IOException { //ensure that the message dose not contain the delimiter for(byte b:message){ if(b==DELIMTER) throw new IOException("Message contains delimiter"); } out.write(message); out.write(DELIMTER); out.flush(); } @Override public byte[] nextMsg() throws IOException { ByteArrayOutputStream messageBuffer=new ByteArrayOutputStream(); int nextByte; while((nextByte=in.read())!=DELIMTER){ if(nextByte==-1){//end of stream? if(messageBuffer.size()==0){ return null; }else{ throw new EOFException("Non-empty message without delimiter"); } } messageBuffer.write(nextByte); } return messageBuffer.toByteArray(); } }
顯式長度方法:

Java代碼 import java.io.DataInputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class LengthFramer implements Framer { public static final int MAXMESSAGELENGTH=65535; public static final int BYTEMASK=0xff; public static final int SHOTMASK=0xffff; public static final int BYTESHIFT=8; private DataInputStream in;// wrapper for data I/O public LengthFramer(InputStream in) throws IOException{ this.in=new DataInputStream(in); } @Override public void frameMsg(byte[] message, OutputStream out) throws IOException { if(message.length>MAXMESSAGELENGTH){ throw new IOException("message too long"); } //write length prefix out.write((message.length>>BYTEMASK)&BYTEMASK); out.write(message.length&BYTEMASK); //write message out.write(message); out.flush(); } @Override public byte[] nextMsg() throws IOException { int length; try{ length=in.readUnsignedShort(); }catch(EOFException e){ //no (or 1 byte) message; return null; } //0<=length<=65535; byte [] msg=new byte[length]; in.readFully(msg);//if exception,it's a framing error; return msg; } }

Ⅷ java 實現簡單的通訊協議·

就是基於socket的編程啊接著肯定少不了IO啊,數據鏈路層的傳輸單位是幀,也就是位元組,剩下的就是解析和操作數據了。最後就完了。

Ⅸ 請幫忙用java socket寫個通信類,通信協議是如下,謝謝!

這個協議要花很久時間的,估計在網路知道沒人會給你做出來
不過這個 不是什麼難東西 懂得基礎的socket知識即可 至少稍微有些繁瑣罷了
加油

Ⅹ 求java 解析7號信令數據數據

1、七號信令的基本術語

1.1 信令網

N0.7信令網是獨立於電信網的支撐網,是電信網中用於傳輸No.7信令消息的專用數據網。信令網的三要素:信令點、信令轉接點、信令鏈路。

(圖4.2-b)
ISUP基本術語注釋:
IAM(Initial Address Message):初始地址消息
SAM(Subsequent Address Message):後續地址消息
INR:信息請求
INF:信息
ACM(Address Complete Message):地址全消息
CPG:呼叫進展
ANM(Answer Message):應答消息
SUS:暫停
REL(Release):釋放
RLC(Release Complete):釋放完成
CCL(Calling Party Clear Signal):主叫掛機信號

閱讀全文

與java通信協議解析代碼相關的資料

熱點內容
iphone5國際漫遊設置 瀏覽:107
ipodwatch如何安裝app 瀏覽:114
誰有微信搶紅包的群號 瀏覽:872
word07頁碼從任意頁開始 瀏覽:791
js禁止滑動事件 瀏覽:800
蘋果查序號怎麼看不是 瀏覽:61
linux在txt文件 瀏覽:568
ps如何導入文件匹配 瀏覽:201
轉轉app怎麼把自己的賬號租出去 瀏覽:828
福昕閱讀器合並照片pdf文件 瀏覽:591
vhd文件有什麼用 瀏覽:482
編程小朋友看什麼書 瀏覽:623
經營如何讓數據說話 瀏覽:258
如何在手機上升級opop 瀏覽:614
coreldrawx5免費視頻教程 瀏覽:725
網站引導頁面源碼 瀏覽:234
個人簡歷範文word 瀏覽:220
uc下載的視頻怎樣提取到文件 瀏覽:499
英雄下載下載最新版本2015下載安裝 瀏覽:433
NX深孔鑽編程替換面如何操作 瀏覽:725

友情鏈接