Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189

Плохо работает recv

08.05.2019, 17:34. Показов 3211. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не кто не сталкивался с проблемой. recv читает первый раз хорошо все данные приходят как надо, на второй раз он читает в буфер 0, 0 читает столько сколько указано в 3 параметре и это длится бесконечно, то есть сокет не блокируется, при этом "Сервер" не чего не отправляет стоит на бреакпоинте.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.05.2019, 17:34
Ответы с готовыми решениями:

Интернет работает, но Chrome и IE не открывают сайты. Firefox работает, но плохо
Добрый день! У меня два компьютера получают интернет от одного роутера. На одном компьютере всё нормально, на втором началась такая...

Всего одна из страниц сайта плохо работает в IE и Мозилле (абра-кадабра).В Опере все работает.
Привет всем. Сделал небольшой сайтик на HTML и немножко СSS там присутствует. Это мой первый сайт. Состоит из десяти страничек....

Не работает или совсем плохо работает интернет
Здравствуйте! Что-то третий день уже на винде не работает интернет. Так иногда, если долго обновлять страницу, что-то откроется. А вот с...

33
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.05.2019, 14:20
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Sierra26 Посмотреть сообщение
а что будет если буфер recv переполнится?
Неблокирующий по-моему просто ничего не отправит. Проверяй результат recv, чтто не меньше чем ты отправил

Добавлено через 2 минуты
Цитата Сообщение от Sierra26 Посмотреть сообщение
И как узнать размер буффера сокета?
setsockopt/getsockopt - SO_RCVBUFSIZ, SO_SNDBUFSIZ

Добавлено через 15 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Проверяй результат recv, чтто не меньше чем ты отправил
Результат send
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
15.05.2019, 17:41  [ТС]
Сделал отдельно клиента и сервера ,все работает. Ничего не понимаю
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
15.05.2019, 17:57  [ТС]
Хотя нет, Ломается. oleg-m1973, если не сложно не могли бы попробовать у себя. У меня даже на локальном компьютере, если стоит сервер и клиент, то не так работает.
Вложения
Тип файла: rar TestClientServer.rar (9.6 Кб, 3 просмотров)
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
15.05.2019, 18:23
Sierra26, попробую еще раз повторить: внимательно разберись в размером передаваемой структуры - размер в цикле у тебя вычитается и в итоге у тебя в сенде просто идет 0.
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
15.05.2019, 19:16  [ТС]
Вованя, где он вычитается. Ничего не понял. Можете показать участок кода
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
15.05.2019, 20:27
Sierra26, в функции Send()
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.05.2019, 21:32
Цитата Сообщение от Sierra26 Посмотреть сообщение
У меня даже на локальном компьютере, если стоит сервер и клиент, то не так работает.
Я ж тебе вроде сказал - напиши простой сервер, на один коннект, а не то что у тебя там. Потом напиши клиента, чтоб работал. Потом усложняй сервер.
1
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
16.05.2019, 11:26  [ТС]
Проблема все таки в клиенте. И у меня возник вопрос? В каких случаях разблокируется функция recv. Мое мнение было, что когда придут данные >= указанных в 3 параметре функции recv, но оно оказалась ошибочным!
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.05.2019, 11:27
Цитата Сообщение от Sierra26 Посмотреть сообщение
В каких случаях разблокируется функция recv. Мое мнение было, что когда придут данные >= указанных в 3 параметре функции recv, но оно оказалась ошибочным!
Или когда сервер разорвёт коннект, должен прийти ноль.
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
16.05.2019, 11:29  [ТС]
вот что вычитал: "Дело в том, что recv гарантирует лишь то,
что в случае успеха будет прочитано от 1 до sizeof(buffer) байт.
В данном случае размер буфера для recv - 4 байта, но прочесть она
может за один вызов и три байта, и два, и один. Так что начать нужно с этого."

Кстати говоря, это вообще наитипичнейшая ошибка всех, кто учит работу в сетях."

Ссылка на форум Функция recv не разблокируется после отправки сообщения в канал
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.05.2019, 11:38
Цитата Сообщение от Sierra26 Посмотреть сообщение
Кстати говоря, это вообще наитипичнейшая ошибка всех, кто учит работу в сетях."
Ошибка - использовать блокирующий recv. Нужно делать так
В цикле:

делаешь select/poll/WSaPoll на таймаут ~100ms, если данных нет - снова
если данные пришли, запрашиваешь размер ::ioctlsocket(sock, FIONREAD, &dwRead)
если dwRead == 0 , то сервер разорвал коннект, можно закрывать сокет
делаешь n = recv(....., dwRead), усли n < dwRead - коннект разорван...
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
16.05.2019, 11:50  [ТС]
да проблема оказалась в том ,что recv гарантирует лишь то, что в случае успеха будет прочитано от 1 до sizeof(buffer) байт. Решил проблему написание вот такой функции. Может быть кому-нибудь пригодится:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool Recv(IN SOCKET s, char* buf, int len, int flags)
{
    int nSumByte = 0;
    int nByte = 0;
    do
    {
        int nByte = recv(s, &buf[nSumByte], len - nSumByte, 0);
        if(nByte <= 0)
            return false;
        nSumByte += nByte;
        if(nSumByte == len)
            return true;
        else
            int k = 6;
    }while(true);
 
}
Всем спасибо!
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
16.05.2019, 12:50
Цитата Сообщение от Sierra26 Посмотреть сообщение
C++
1
2
else
* * * * * * int k = 6;
что это?
Цитата Сообщение от Sierra26 Посмотреть сообщение
int flags
не используется.
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
16.05.2019, 13:00  [ТС]
else
* * * * * * int k = 6;
Это для отладки.

int nByte = recv(s, &buf[nSumByte], len - nSumByte, flags);

flags сюда надо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.05.2019, 13:00

Перехват API winsock32.recv - под отладчиком работает 100%, без отладчика - 50%
Добрый день, уважаемые Киберчане. Прошу Вашей поддрежки. Описание проблемы. Вызов функции CreateFileA, для записи буфера...

Не работает или плохо работает озу !
с недавнего времени стали такие проблемы ! - часто синий экран смерти пишет &quot;memory management&quot; - браузер Firefox...

Плохо работает Wi Fi
http://www.microprice.ru/product/a45M3o543043870634d456Ce Очень плохо видит сеть, другие компьютеры видят нормально. Что можно сделать?

Плохо работает роутер
Здравствуйте, я долго искал, куда можно обратиться по данному вопросу, попробую сюда) В общем купил роутер Wi-fi TRENDNET 652BRU, года...

Плохо работает include!
Здраствуйте, заранее спасибо кто поможет=))) Ситуация такая папка сайта www - (в ней страници , папка с программой, и другие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru