2014-11-06 5 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) Не работая, я имел в виду: когда я получаю структуру и печатаю значение в num. Он печатает не то же значение, а ноль!

+3

'не working' .. просьба уточнить. что такое «хмель»? –

+0

Можете ли вы показать свой полный код ..? –

+3

Есть несколько проблем, которые могут возникнуть в результате отправки структур непосредственно так: Прежде всего, это проблема с заполнением, если вы компилируете отправителя и получателя с использованием разных компиляторов, они могут добавлять в структуру разные дополнения. Печать, например. 'sizeof (struct sample)' в обеих программах. Затем возникает вопрос о порядке байтов, обе системы, которые вы отправляете между ними, имеют ту же [endianness] (https://en.wikipedia.org/wiki/Endianness)? И, наконец, «хмель» одинаковый как у отправителя, так и у получателя? –

ответ

0

, если вы пытаетесь отправить-структуру необходимо использовать сериализации и десериализации, читать о том, что вы можете начать с:

Serialization issues while sending struct over socket

+0

Я так не считаю. '' '' Сам по себе представляет собой байтовые строки, которые, естественно, сериализуются, и не потому, что OP не смог получить данные. – HuStmpHrrr