之前寫過一篇python的十六進製制資料傳遞與接收,介紹了網路位元組序等概念,這裡就不在贅述了,下面主要介紹下c#下怎麼進行網路位元組序的傳送與接收。
在python中使用到了struct結構體進行資料的封裝,這裡同樣也使用struct,關於c#的struct結構體簡單介紹如下:
比如採用udp協議,協議資料有 長度、裝置名稱、裝置ip、命令編號、訊息體5個字段組成
字段長度
裝置名稱
裝置ip
命令編號
訊息體長度
4位元組2位元組
2位元組1位元組
變長而訊息體又包含長度、命令編號和內容
字段長度
命令編號
內容長度
2位元組1位元組
變長這樣乙個訊息就包含了固定長度為9的訊息頭和可變長度的訊息體組成
經過分析之後開始建立訊息頭和訊息體的結構體
namespace struct_wly
}
關於訊息體可能有很多個,只有內容的長度是變化的,可能有1,3,20,50等長度,這就得建立不同長度的結構體,相同內容長度的訊息體可以使用同乙個結構體來封裝和接收,比如建立乙個25長度內容的結構體
namespace struct_wly
}
private static void send(ipendpoint ipend)
其中structhelper.stucttobyte方法是將結構體轉為位元組陣列,在後面將會給出
private static void send(ipendpoint ipend)
//位元組數組合並方法
public static byte getcontactbyte(byte bt, byte bt2)
private static void datareceived(xxudpeventargs args, xxudpbody udpbody)}}
public static class structhelper
//分配結構體大小的記憶體空間
intptr structptr = marshal.allochglobal(size);
//將byte陣列cpoy到分配好的記憶體空間內
marshal.copy(databuff_, 0, structptr, size);
//將記憶體空間轉換為目標結構體
t obj = (t)marshal.ptrtostructure(structptr, t);
//釋放記憶體空間
marshal.freehglobal(structptr);
return obj;
}/// /// 結構體轉byte陣列
///
/// 結構體
/// byte陣列
public static byte stucttobyte(object objstuct)
public static char getfixlengthchar(this string s, int length)
public static string getstring(this char cc)
public static string getstring(this char cc, bool istrimend)
else}}
結構體可以包含結構體以及結構體陣列,如下:
1.包含結構體
namespace struct_wly
}
2.包含結構體陣列
namespace struct_wly
}
private static void sendmsg());}
訪問我的達人課
訪問我的部落格 wang's blog
網路資料傳輸
網路資料傳輸 wcdma全名是widebandcdma,中文譯名為 寬頻分碼多工訪問 它可支援384kbps到2mbps不等的資料傳輸速率,在高速移動的狀態,可提供384kbps的傳輸速率,在低速或是室內環境下,則可提供高達2mbps的傳輸速率。而gsm系統目前只能傳送9.6kbps,固定線路mod...
Qt 網路資料傳輸
以前寫介面主要用qt做ui,底層的功能是呼叫別人提供的介面,分工比較明確,但要更好地實現跨平台,則盡量使用qt內部的介面 當然,也有很多比較強大的庫,例如libcurl qt5自帶的網路處理模組qtnetwork 主要通過qnetworkaccessmanager qnetworkrequest q...
網路程式設計之位元組序對跨平台資料傳輸的影響
關於位元組序對跨平台資料傳輸的作用。我分下面幾個方面整理了下,知識點應當算比較全了。一。從服務端傳送整數到客戶端為例,看看位元組序的應用。二。什麼是位元組序?三。什麼是網路位元組序 四。如何確定本機的大小端 一。從服務端傳送整數到客戶端為例,看看位元組序的應用。服務端 節選 傳送整數 呼叫 send...