im stuck with recv
то есть приходит пакет и обычно для всех байт хватает одной итерации цикла а тут всегда + еще 1
туплю
help
core707[досье] Какой язык? Примеры кода минимальные приведите.
P.S. Форум явно не подходящий выбрали. Причем тут толстые клинты и сервера.
А где надлежащий форум тогда?
Вроде как про сетевеые коммуникации..нет ?
c++
winsock2
while((bytes_=recv(sock,tobuff,sizeof(tobuff)-1,0)) && bytes_!=SOCKET_ERROR && tobuff != 0) { doing something... }
Как по мне, оно не должно работать вовсе.
Под винду не программлю, но думаю recv везде похож, поэтому конструкцию sizeof(tobuff) нельзя так юзать.
Там tobuff это char *, и по стандарту sizeof вернет длину указателя, а не строки.
Нужно что-то типа:
char *tobuff; #define BUFSIZE 1000 tobuff=new char [BUFSIZE]; // обнуление tubuff (memset(tubuff,0,BUFSIZE) или по друному как-то) while((bytes_=recv(sock,tobuff,BUFSIZE,0)) && bytes_!=SOCKET_ERROR && tobuff != 0) { doing something... с данными в количестве bytes_ // обнуление tubuff (memset(tubuff,0,BUFSIZE) или по друному как-то), если будем дальше юзать } if(tobuff!=NULL) //если несколько раз вызвать без проверки - вылетит с ошибкой сегментации delete tobuff;
P.S. на sock лучше навесить обработку таймаута - иначе дооооолго ждать можно.
2vvvua
Все рабоает, не знаю пожет это под unix следует так делать
на http://msdn.microsoft.com/libr......-us/winsock/winsock/recv_2.asp
вроде об этом нисказано
Если определить буффер как массив символов, а не как указатель, то sizeof будет возвращать правильное значение.
Владимир Палант[досье]
Да, точно. Давно не использовал такого объявления и подзабыл.
core707[досье]
В примере не используется sizeof:
char recvbuf[32] = "";
bytesRecv = recv( ConnectSocket, recvbuf, 32, 0 );
И я не советую. Изменится объявление и будет ошибка.
Проблема при отсылке была? strlen не то возвращал ? Или что-то другое? (Интересно просто)