1. 程式人生 > >c++ 訊息封裝(包頭+包體)

c++ 訊息封裝(包頭+包體)

資料結構

包頭:type+length = 8 (int32 4 位元組)

uint32_t type 
uint32_t length
包頭 包體
type+length data
8 sizeof(data)

example

#define LOGIN_IN 1
uint32_t type = LOGIN_IN ; // 訊息型別假定為登入訊息 值為1
char data[] = { 'a','b','c' ,'d' ,'e','f' }; // 具體訊息內容
// 則訊息長度為
uint32_t length = 8 + sizeof
(data); // length = 14 // 定義一個訊息 char msg[1024]; memset(msg, 0, sizeof(data) + 8); // 封裝 memcpy(&msg[0], &type, sizeof(type)); // type [0,4) memcpy(&msg[4], &length, sizeof(length)); // length [4,8) memcpy(&msg[8], &data, sizeof(data)); // data [8,sizeof(data)) // 解析
int t; int l; memcpy(&t, &msg[0], sizeof(t)); memcpy(&l, &msg[4], sizeof(t)); printf("type:%d\nlength:%d\n", t, l); printf("body:"); for (size_t i=8; i<sizeof(msg);i++) { if (i>length) { break; } printf
("%c", msg[i]); }

這裡寫圖片描述

相關推薦

c++ 訊息封裝包頭+

資料結構 包頭:type+length = 8 (int32 4 位元組) uint32_t type uint32_t length 包頭 包體 type+leng

swoole學習筆記網路通訊協議設計 -- EOF結束符協議和固定包頭+協議

上2篇筆記講述了TCP伺服器端和TCP客戶端,既然他們之間要互相通訊,必須要制定一套通訊協議。 swoole目前支援2種通訊協議:EOF結束符協議和固定包頭+包體協議 一、EOF結束符協議 EOF協

獲取文件數據流+疊加byte數組給byte數組加包頭

try 合並 文件 restore mode mem string 數據流 send 1 OpenFileDialog ofd = new OpenFileDialog(); 2 ofd.Filter = "(*.mp4)|*.mp4|(*.*

C# SQL封裝

c# sql封裝(二)接 C# SQL封裝(一)開始操作數據庫的測試 :using System;using System.Collections.Generic;using System.Linq;using System.Text;using DBDome.com;using DBDome.model;u

C# SQL封裝

c# sql封裝(一)感謝軟謀徐老師的SQLHelper.as , 代碼如下(本人有所改動):using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using

C】sizeof空結構/空類的大小

sizeof(空類/空結構體) = 1; #include <iostream> using namespace std; // 空類 class ClassA { }; // 繼承空類的空類 class ClassB

手動安裝cloudera manager 5.xtar方式詳解

text res 三種 href none bin -i min devel 官方共給出了3中安裝方式:第一種方法必須要求所有機器都能連網,由於最近各種國外的網站被墻的厲害,我嘗試了幾次各種超時錯誤,巨耽誤時間不說,一旦失敗,重裝非常痛苦。第二種方法下載很多包。第三種方法對

Nginx代理與反向代理rpm安裝

服務器 apache nginx 反向代理 註意:情況1:當後端是獨立的php-fpm服務器模塊的話需要fastcgi協議情況2:當後端是LAMP的話,使用的就是Apache協議不需要開啟fastcgi模塊直接寫個location / {proxy_pass http://backserver

[luoguP1417] 烹調方案DP

明顯 tiny -- spa getchar pre 代碼 long -1 傳送門 By tinylic 如果沒有b[i]這個屬性的話就是明顯的01背包問題。 現在考慮相鄰的兩個物品x,y。假設現在已經耗費p的時間,那麽分別列出先做x,y的代價: a[x]-(

codevs1298, hdu1392 模板

叉積 pan 向量 math != 不能 p s ace iostream 題意: 求凸包周長。 總結: 測試模板。 代碼: #include <iostream> #include <cstdio> #include <cstring>

ERP商品管理業務邏輯封裝三十一

extend colspan wid tel row $() ase 1.4 ble 產品購進管理業務邏輯: public class ProductBLL { /// <summary> /// 產品對象添

JSON 解析工具的封裝FastJSON-->Java

str ras bool return pass pre mail lar 格式化json 1.添加依賴包 <dependency> <groupId>com.alibaba</groupId> <a

C/C++細節問題bug調試以動態綁定代碼來示例

c++ 動態 在程序界,有句話是,程序好些,bug難調。很多bug並不一點是邏輯錯誤,而是一些細節問題。我們分析下三個細節錯誤引起的無法運行問題://#define M_PI 3. 14159265358979323846 3.14中間有個空格\t 寫成了\ t 有

C++中virtual虛函數的用法

this char 基類 變化 代碼 程序 但是 cnblogs else 轉載:http://blog.csdn.net/foreverhuylee/article/details/34107615 在面向對象的C++語言中,虛函數(virtual function)是一

C#編程二十二----------繼承的類型

集成 語言 type 共享 面向對象 多重繼承 值類型 不同 不同的 繼承的類型 在面向對象的編程中,有兩種截然不同的集成類型:實現繼承和接口繼承 實現繼承:表示一個類型派生於一個基類型,它擁有該基類型的所有成員字段和函數.在實現繼承中,派生類型采用基類型的每個函數的實現代

C#編程二十五----------接口

目的 count() 聲明變量 form [] 類的繼承 計算機 構造 執行 接口 如果一個類派生自一個接口,聲明這個類就會實現某些函數.並不是所有的面向對象的語言都支持接口. 例如,有一個接口:IDispoable,包含一個方法Dispose(),該方法又類實現,用於清理

C#編程二十四----------修飾符

宋體 public ext str 繼承 應用 man 空間 layout 修飾符 修飾符即應用於類型或成員的關鍵字.修飾符可以指定方法的可見性,如public或private,還可以指定一項的本質,如剛發的vritual或abstract. 可見性的修飾符 修

MSVC2012終於“真正”支持C++11了Windows XP Targeting

http target lan left info href userinfo iuc cow 剖o0辜4R趙64yo貉業http://www.docin.com/app/user/userinfo?userid=181333168 8柿7c06油萊4耪chttp://ww

C++中virtual虛函數的用法詳解

sla margin tar 實現 store ocs rfs hud iuc int128除法怎麽實現? 怎麽求十億個64位整數的平均數? C語言是否正在走下坡路 看幾遍了 老是1error, 求大神幫忙!!! 狗lKst頻1e甘邪攪http://jz.docin

c#基礎入門算術運算符++ --

-1 clas num strong ron ack col line 操作符 運算符又名操作符是用於運算的符號,作用於一個或多個的操作數。(操作數:參與運算的數據。) 運算符++和-- ++,叫做自加運算符。比如今天22號,明年長了一天,用代碼寫出來是這樣: int