就是利用無線數傳模塊的這個功能:需要將資料發送給指定模塊,可以將資料加入地址碼,在設備接收到資料的時候判斷地址是否為本設備地址,如果不是就丟棄。
uj5u.com熱心網友回復:
既然是透傳,自己定義協議,你需要操作串口,有個cnComm的原始碼,可以在CCRUN.com上找到,使用串口發送字串即可,你可以定義這樣的結構在頭int t_ver;//版本號
in t_len;//資料長度
int t_station; //目標站點
int t_cmd;//命令型別
發送的資料就是 資料頭+內容,接收方拿到分析解包即可,和Socket沒什么區別
uj5u.com熱心網友回復:
有沒有差不多例子uj5u.com熱心網友回復:
有類似的例子么?
uj5u.com熱心網友回復:
我用的是tcomm
uj5u.com熱心網友回復:
你現在硬體級別的協議,就是串口通訊協議,這個按照普通的 RS232 對通信兩端進行設定就行了。至于應用層的通訊協議, 這個最好按照你的業務來自定義, 不過, 絕大多數應用層通訊協議都會是這樣的結構:
struct MYHEADER
{
unsigned int Bytes; // 指明Data中的資料位元組數
unsigned char Data[1]; // 這個Data是變長,根據業務來規劃
};
如此一來, 發送端和接收端都能明確的知道,每一次傳輸的位元組數,通訊自然就能同步了。
接收端,每次接收時,可以分成2個步驟,第一次僅接收4個位元組,這就是 Bytes, 表示后面還有多少位元組的資料到來,然后再繼續接收 Bytes 個位元組的資料, 接收完成后,就把剛剛接收到的資料進入業務處理。
uj5u.com熱心網友回復:
那我是要通過通信協議的不同來決定這條訊息發給誰,這個怎么弄
uj5u.com熱心網友回復:
其實, 上面我說的結構, 是一個用于通訊的萬能結構(也可說是絕大多數通訊協議都具有的結構)。按照你的說法, 實際上這個結構再繼續擴展一點:
// 協議頭
struct MYHEADER
{
unsigned int Bytes; // 指明Data中的資料位元組數
unsigned int Protocol; // 協議編號
unsigned char Data[1]; // 這個Data是變長,根據業務來規劃
};
// 假設你的情況是這樣:
// 當 Protocol=1 時,這個資料包是發給 A 設備的,實際的通訊結構假設是這樣的
struct MYDEVICEA
{
unsigned int Bytes; // 指明Data中的資料位元組數
unsigned int Protocol; // 協議編號
unsigned int Code; // 攜帶的資料:代碼
unsigned char Name[20]; // 攜帶的資料: 名稱
unsigned char Data[1]; // 這個Data是變長,根據業務來規劃
};
// 當 Protocol=2 時,這個資料包是發給 B 設備的,實際的通訊結構假設是這樣的
struct MYDEVICEB
{
unsigned int Bytes; // 指明Data中的資料位元組數
unsigned int Protocol; // 協議編號
unsigned char FileName[MAX_PATH]; // 攜帶的資料:要讀取的檔案名稱
unsigned int StartPosition; // 讀取起始位置
unsigned int ReadLength; // 要讀取的位元組數
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/101643.html
標籤:網絡及通訊開發
上一篇:mbedtls | 01 - 移植mbedtls庫到STM32的兩種方法
下一篇:C++類成員函式
