2014-11-06 62 views
1

我正在寫一個程序,它使用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)通過不工作我的意思是:當我收到的結構,並在數字中打印值。這是打印不同的價值,但零!

+3

'不working' ..請澄清。什麼是「啤酒花」? – 2014-11-06 10:23:52

+0

你可以顯示你的完整代碼..? – 2014-11-06 10:25:08

+3

直接發送結構可能會產生多種問題:首先是填充問題,如果使用不同的編譯器編譯發送方和接收方,它們可能會在結構中添加不同的填充。打印例如'兩個程序中的sizeof(struct sample)'。然後是字節順序問題,你們之間發送的兩個系統是否具有相同的字節順序(https://en.wikipedia.org/wiki/Endianness)?最後,發送者和接收者都是「啤酒花」嗎? – 2014-11-06 10:29:14

回答

相關問題