Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2011, 11:40   #1
xapiton
 
Регистрация: 25.10.2009
Сообщений: 8
По умолчанию передача структуры по сети. send, recv

на стороне клиента привожу структуру к типу char*:

Код:
DATA * PDATAClient;
send( sock, (char*) PDATAClient, sizeof(DATA), 0 );
send возвращает что байты передал.
на стороне сервера принимаю:

Код:
char *buffClient = new char;
recv( sock, buffClient, sizeof(DATA), 0 );
но recv возвращает -1.
если передавать не структуру, а char (т.е. без приведения типов), то все работает.
помогите. я так понимаю моя проблема в приведении типов ???
====================
WSAGetLastError() вернул 0.
сокет TCP

Последний раз редактировалось xapiton; 18.05.2011 в 11:57.
xapiton вне форума Ответить с цитированием
Старый 18.05.2011, 11:47   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> char *buffClient;

а где выделение памяти под buffClient?

> recv возвращает -1

намного интересней, что возвращает WSAGetLastError()

> sizeof(DATA)

и ещё, если сокеты UDP, больше 1400 байт за раз лучше не передавать
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 18.05.2011, 12:28   #3
xapiton
 
Регистрация: 25.10.2009
Сообщений: 8
По умолчанию

получилось.
только теперь не пойму как char* привести к структуре, делаю так :

int recvBytes = 0;
recvBytes = recv(pData->sock,buffClient,sizeof(tagDATA),0) ;
cout << "recvOK " << recvBytes << endl;

DATA* data;
data = (DATA*) buffClient;

выпадает какая то ошибка на этапе выполнения. А если убрать cout или вот так cout << "recvOK " << endl; то вроде стабильно.

Последний раз редактировалось xapiton; 18.05.2011 в 12:55.
xapiton вне форума Ответить с цитированием
Старый 18.05.2011, 13:40   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> char *buffClient = new char;

если продолжать выделять память под буфер подобным образом, то ещё и не такие глюки полезут.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 18.05.2011, 13:49   #5
xapiton
 
Регистрация: 25.10.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
> char *buffClient = new char;

если продолжать выделять память под буфер подобным образом, то ещё и не такие глюки полезут.
верно. надо было так char *buffClient = new char[sizeof(DATA)];
все работает. разобрался.
спасибо большое.
xapiton вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сервер-клиент, recv-send и проблема с передаваемыми символами. Ksardas13 Общие вопросы C/C++ 9 27.03.2011 20:49
hook на сетевые функции (send, recv) 0lorin Win Api 3 08.10.2010 13:03
send/recv: размер сообщения cw_o Работа с сетью в Delphi 4 23.04.2010 19:00
MPI: send и recv cheparamba Общие вопросы C/C++ 0 09.03.2010 05:48
WinSock (send, recv) AidarBik Работа с сетью в Delphi 1 27.07.2008 15:22