блина, торможу я - помогите найти где лажанулся...
--------------------------------
две структурки в хедере
struct MYDATA {
long size
void* data;
};struct MYPACK{
long size;
int some_fields;
struct MYDATA content;
};--------------------------------
теперь клиентская сторона
struct MYPACK *my_pack_p = (struct MYPACK*)malloc(sizeof(struct MYPACK));my_pack_p->content.size = strlen("vasa");
my_pack_p->content.data = malloc(my_pack_p->content.size);
strncpy((char*)my_pack_p->content.data, "vasa", my_pack_p->content.size);
/*остальные поля инициализируем тоже*/
my_pack_p->size = sizeof(*my_pack_p) + my_pack_p->content.size;
/*т.е. размер структуры плюс размер данных*/
потом пара десятков строк открытие сокета
sd = socket(AF_INET,SOCK_DGRAM,0);и если все хорошо, то шлю my_pack_p на сервер
rc = sendto(sd, msg, msg->size, 0,
(struct sockaddr *) &remoteServAddr, sizeof(remoteServAddr));
все уходит "на ура"--------------------------------
теперь серверная сторонаn = recvfrom(sd, msg, 65000, 0, (struct sockaddr *) &cliAddr, &cliLen);
получаю мой пак в msg. n - равен msg->size (т.е. тому размеру, который
я и послал). ВСЕ поля структуры получили те значения, которые я определил
у клиента, ЗА ИСКЛЮЧЕНИЕМ СТРОКИ!!!
строка всегда пустая. msg->content.size равен длине посланной строки
а (char*)msg->content.data всегда пуста........блина. и что я напортачил????
>
>блина, торможу я - помогите найти где лажанулся...
>--------------------------------
>две структурки в хедере
>struct MYDATA {
>long size
>void* data;
>};на первый взгляд
вроде как надо не void* data а char data[MAX_LEN] ну а MAX_LEN сам задай.
>>
>>блина, торможу я - помогите найти где лажанулся...
>>--------------------------------
>>две структурки в хедере
>>struct MYDATA {
>>long size
>>void* data;
>>};
>
>на первый взгляд
>вроде как надо не void* data а char data[MAX_LEN] ну а MAX_LEN
>сам задай.
все. разобрался.
надо так
struct BLA{
int field;
int len;
char data[0];
};
и аллокировать переменную с размером = размер структуры + размер данных.при это надо помнить что data всегда в конце!всем спасибо