[英]Sending a structure over a socket
我正在嘗試實現一個程序,通過c ++套接字從客戶端向服務器發送結構。
到目前為止,我在自己的計算機上工作正常(服務器和客戶端都在我自己的計算機上),但我懷疑在不同的計算機上運行服務器和客戶端時可能會遇到麻煩。
到目前為止我所擁有的是:
struct myStruct
{
int whatever;
};
//Sender
myStruct obj;
obj.whatever = 123;
char *byteStream = (char *) &obj;
write(socketFD, byteStream, sizeof(myStruct));
//Receiver
char *byteStream = new char[sizeof(myStruct)];
read(socketFD, byteStream, sizeof(myStruct));
myStruct *received = (myStruct *) byteStream;
cout<<received->whatever;
接收器上的cout聲明打印123。
只要字節順序相同(例如,兩者都是PC),這應該在不同的計算機上工作。
這很好,現在只要字節順序和結構的包裝將被保留(一旦你在你的不止一個數據成員struct
), 但是 ,使用sizeof(myStruct)
會給你的問題,當你在你的結構數據成員分配堆內存。
我不會從一開始就依賴sizeof
。 構建一個函數來獲取數據大小並使用它。
你應該認真考慮某種序列化庫。 JSON
非常流行且非常容易調試,因為它本質上是文本格式。 Google protocol buffers
效率更高,但需要更多努力才能使其正常工作。 還有像Thrift
這樣的其他類似的庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.