The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"вопрос по сокетам"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"вопрос по сокетам"
Сообщение от Gorynych Искать по авторуВ закладки on 04-Ноя-03, 16:10  (MSK)

блина, торможу я - помогите найти где лажанулся...
--------------------------------
две структурки в хедере
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 всегда пуста........

блина. и что я напортачил????

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "вопрос по сокетам"
Сообщение от vvv emailИскать по авторуВ закладки on 04-Ноя-03, 16:30  (MSK)
>
>блина, торможу я - помогите найти где лажанулся...
>--------------------------------
>две структурки в хедере
>struct MYDATA {
>long size
>void* data;
>};

на первый взгляд
вроде как надо не void* data а char data[MAX_LEN] ну а MAX_LEN сам задай.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "вопрос по сокетам"
Сообщение от Gorynych Искать по авторуВ закладки on 04-Ноя-03, 18:57  (MSK)
>>
>>блина, торможу я - помогите найти где лажанулся...
>>--------------------------------
>>две структурки в хедере
>>struct MYDATA {
>>long size
>>void* data;
>>};
>
>на первый взгляд
>вроде как надо не void* data а char data[MAX_LEN] ну а MAX_LEN
>сам задай.


все. разобрался.
надо так
struct BLA{
int field;
int len;
char data[0];
};
и аллокировать переменную с размером = размер структуры + размер данных.при это надо помнить что data всегда в конце!

всем спасибо

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру