我正在寫一個程序,它使用c中的套接字編程。發送一個結構通過套接字在c
在這個程序中,客戶端和服務器不停地傳輸和接收數據。
當我發送和使用這種代碼
//in the program sending data
int data;
len= send(s,(char *)&(data),sizeof(data),0);
//in the program receiving data
int num;
len = recv(s,&num, sizeof(num) , 0);
上面的代碼工作正常,我能夠發送和接收數字接收通過插座整數。
在一種情況下,我嘗試發送形式的結構
struct sample{
int num;
char chain[10*hops+10];
};
//in the program sending data
struct sample s1;
len= send(s,(char *)&(s1),sizeof(s1),0);
//in the program receiving data
struct sample s2;
len = recv(s,&s2, sizeof(s2) , 0);
在我試圖發送和接收的結構它是不工作的例子。如何成功發送和接收結構?
注意: 1)跳數是一個預先定義的變量。跳轉的值在兩個程序中都是相同的。 2)通過不工作我的意思是:當我收到的結構,並在數字中打印值。這是打印不同的價值,但零!
'不working' ..請澄清。什麼是「啤酒花」? – 2014-11-06 10:23:52
你可以顯示你的完整代碼..? – 2014-11-06 10:25:08
直接發送結構可能會產生多種問題:首先是填充問題,如果使用不同的編譯器編譯發送方和接收方,它們可能會在結構中添加不同的填充。打印例如'兩個程序中的sizeof(struct sample)'。然後是字節順序問題,你們之間發送的兩個系統是否具有相同的字節順序(https://en.wikipedia.org/wiki/Endianness)?最後,發送者和接收者都是「啤酒花」嗎? – 2014-11-06 10:29:14