網路資料包頭結構:
#define FLAG 0x55AA55AA //網路資料包頭標志
#define DWORD unsigned int
typedef struct _TAG_DetectNetHead_T
{
DWORD nFlag ; //網路資料包標志(0x55AA55AA)
DWORD nDataLen; //資料長度,不包括包頭自身的長度
DWORD nCommType; //型別0:重點人員查詢請求;1:心跳;2:身份資訊
} TAG_DetectNetHead_T;
在java專案中用netty如何封裝這個包頭呢,又如何解呢?得用二進制嗎?具體怎么寫呢?
uj5u.com熱心網友回復:
int nFlag = 0x55AA55AA;//int nDataLen = 訊息體位元組長度
int nCommType = 0;//型別0:重點人員查詢請求;1:心跳;
這三個欄位就是訊息頭,推送給對端后,對端拿到截取了12個位元組,作為訊息頭截取資訊(int占四位元組);
其中nDataLen定了訊息體的長度,對端就知道訊息體長度,再按這個長度截取對應的位元組數,這個訊息體怎么約束的,再去看協議;
具體怎么發送的,我大概寫下:
ByteBuf encoded = ctx.alloc().buffer(12 + Data.length);//data是訊息體長度
byte[] nFlag_b = new byte[4];
//把int轉換成位元組陣列放到nFlag_b里,然后放到ByteBuf ,每個型別的都轉換成對應的位元組陣列,自己轉,也可以封裝成類,比較規范。
encoded.writeBytes(nFlag);
//.............全部組裝好發送給對端,我這里寫的是服務端代碼,客戶端大同小異。
ctx.writeAndFlush(encoded);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/105326.html
標籤:網絡協議與配置
上一篇:socket編程中的getservbyname引數中的name是固定的服務名還是可以自定義的?求解答
下一篇:臺式機網卡指示燈的含義_______________________________________________
