Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366

Получить количество байт, готовых к считыванию из сокета

03.01.2016, 19:39. Показов 5744. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно получить кол-во байт готовых к считыванию из TCP сокета?

Добавлено через 8 минут
в общем нужен аналог метода available() из boost::asio только на winsock
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.01.2016, 19:39
Ответы с готовыми решениями:

Никак не могу понять, как узнать, сколько байт читать из сокета
Честно говоря, пишу не на C++, но вопрос этот может возникнуть в любом языке. Вот, допустим, я пишу клиент к какому-то протоколу (не буду...

Прочитать несколько байт с сокета
Здравствуйте, уважаемые форумчане. Вопрос у меня следующий. reader::reader(QObject *parent) : QObject(parent) { socket =...

Получить количество байт, записанных в com-порт (асинхронный режим)
Не могу получить кол-во байт записанных в порт(асинхронный режим)+отдельный поток. Точнее значение всегда одно-нуль.:help:

25
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
08.01.2016, 15:21
Студворк — интернет-сервис помощи студентам
Значит сам протокол больше пакетный(данные имеют строгое начало и конец) чем поточный, принцип считывания ресивом выглядит как поток, но сборка выглядит как пакет... Я прав?))
Видишь ли, здесь мы с тобой залезли в какие-то дебри.
Сборка данных в поток - это детали работы TCP, для клиентов и серверов,
которые используют TCP, это все совершенно прозрачно. Я отправляю send-ом 50 байт,
кто-то на другой стороне их читает recv-ом, за раз, за два, за двадцать пять - не
важно. 50 байт отправили, в итоге 50 прочитали. Получите и распишитесь. Все.
И TCP - это потоковый протокол, а не пакетный. Здесь границ данных не
существует в принципе.

Сетевая подсистема разбита на уровни, их обычно называют сетевым стеком.
Уровни изолированы друг от друга, каждый уровень работает по своим правилам и
как бы не видит того, что происходит ниже.

На уровне TCP нет таких абстракций, как пакет, там лишь поток данных туда и сюда.
На уровнях ниже - да, там данные собираются в сегменты, бьются на пакеты и
кадры, шифруются, сжимаются, перемешиваются, дублируются, теряются и т.д., но
это уже детали реализации, которые клиентов и серверов, работающих через TCP,
совершенно не заботят.
1
50 / 49 / 10
Регистрация: 24.01.2010
Сообщений: 225
08.01.2016, 18:34
1) читает из очереди. там кольцевой буфер(логически).
2) данные вычитываются по размеру который задаёт юзер(вы в данном случае), и записываются в хвост размером которые пришли по сети(в идеале вы видите ваши порции пропихнутых данных, НО! если ваш передатчик в Америке, либо началась ДДОС атака - вот тут и начнутся те нюансы о которых вам рассказывают). Т.е. не идеальные условия связи(читай популярную литературу про заторы, потери IP пакетов, дефрагментацию IP пакетов и их сборку, максимально допустимый размер IP пакетов и запрет на дефрагментацию).
3) протокол TCP потоковый это по ОПРЕДЕЛЕНИЮ см. RFC по данной тематике. Если вам необходимы пакеты - Вы можете спуститься на уровень UDP. Но он гарантирует только отправку в сеть, так-же согласно RFC.

кстати говоря - предполагать что через TCP вы работаете как с пакетами - это есть распространённая, типичная ошибка. И именно она в большинстве случаев является причиной отказов работы клиент-серверных систем при ударных нагрузках и в неблагоприятных условиях.

удачи вам
(круглый)
1
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
08.01.2016, 19:04  [ТС]
афигеть, мне это казалось таким очевидным а оказалось что я ошибался
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
10.01.2016, 16:17
ТС прочитай про MTU
https://ru.wikipedia.org/wiki/... ssion_unit
0
50 / 49 / 10
Регистрация: 24.01.2010
Сообщений: 225
10.01.2016, 16:44
я Вам большее скажу (чиссо из практики):
Если по пути следования нет никаких девайсов способных зарезать длину IP(v4) пакета - то его длина(Total Length) может быть и 65535(макс. для поля длины) байт в лёгкую.

(круглый)
0
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
14.07.2016, 18:04  [ТС]
Всем привет, апну темку новым вопросом о tcp
Допустим есть 2+ клиента пишущих в 1 сокет асинхронно, размер каждого пакета 18 - 4096 кб, возможно ли что при приеме через этот единственный сокет я приму данные в перемешку, например я считал 40 ( пусть 1-й послал 22, 2-й 18)Кбайт где первые 3 будут от 1-го клиента потом 20 от 2-го и т.д.
или все таки поток будет выглядеть как 22кб посланных 1-ым и 18 2-ым
И если все таки поток будет "правильный", то возможно ли такое что байты перепутаются при отправке ?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.07.2016, 18:04

Как из сокета вернуть число байт, которое пришло?
ввобщем немогу понять как из сокета вернуть именно то число байт которое туда пришло пример: byte buf = new byte; int ibuf =...

Дан массив из 10 байт. Посчитать количество байт, в которых сброшены 6 и 4 биты
Дан массив из 10 байт. Посчитать количество байт,в которых сброшены 6 и 4 биты. Массив байтов размещается начиная с DS:0000h. Ответ должен...

Дан массив из 11 байт. Подсчитать количество байт с нечетным числом 1 в байте
Дан массив из 11 байт. Подсчитать количество байт с нечетным числом 1 в байте.-Assembler помогите пожалуйста

Дан массив из 10 байт. Посчитать количество байт содержащих ровно три единицы
Здравствуйте, возникла проблема с решением задачи: "Дан массив из 10 байт. Посчитать количество байт содержащих ровно три...

Дан массив из 6 байт. Посчитать количество байт число единиц, в которых не превышает 3.
Дан массив из 6 байт. Посчитать количество байт число единиц, в ко- торых не превышает 3. блин люди немогу сделать.


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru