2014-02-09 134 views
0

我想通過從客戶端發送到服務器發送一個結構。該結構是這樣的:通過發送命令發送一個結構

typedef struct{ 
    int age; 
    long int id; 
    char firstName[10]; 
    char lastName[10]; 
    uint32_t somefield; 
} Person; 

現在,當我填寫領域在我的客戶端代碼:

Person person; 
person.age = 52; 
person.id = 1234567; 
strcpy(person.firstName, "Walter"); 
strcpy(person.lastName, "White"); 
inet_pton(AF_INET, "127.0.0.1", &person.somefield); 
person.somefield = htonl(person.somefield); 

,並打印出來,我得到正確的輸出

  • 年齡: 52
  • ID:1234567
  • 第一名:沃爾特
  • 的名字:白
  • 一些UINT:2130706433

我再呼叫發送到結構傳遞到服務器

send(socketfd, &person, sizeof(&person), 0); 

對事物的服務器端,它讀取一個人使用recv:

Person person; 
recv(newSocketfd, &person, sizeof(Person), 0); 

並打印出來的領域,它確實不給我,我期待輸出...

  • 年齡:52
  • ID:4197943
  • 名字:
  • 名字:
  • 一些UINT:4286513152

我已經做了研究,看來只要我沒有通過結構傳遞指針,我應該可以做到這一點。我對此有誤嗎?任何幫助,將不勝感激。

回答

1

sizeof(&person)(在發送中)是個人地址的大小。不是Person結構的大小。嘗試sizeof(Person)