Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Net] Кто разбирается в сокетах подскажите плиз! 17.12.01 16:13
Автор: NeuronViking Статус: Незарегистрированный пользователь
|
Перхватываю вызов send(s,buf,len,flags) ... как используя парметры этой функции узнать полный размер посылаемых данных?! т.е. персылается какиянть инфа, в результате прога вызывает несколько раз функцию send , вот один из таких вызовов я перехватил. Как узнать размер всей пересылаемой инфы?! Возможно ли вообще такое?! Может есть какиенть функции которые позволяют по описателю сокета получить размер всего буфера(не buf!) и еще какуюнть инфу?!
|
|
[Net] Кто разбирается в сокетах подскажите плиз! 17.12.01 16:28
Автор: Wizard(2) Статус: Незарегистрированный пользователь
|
> Перхватываю вызов send(s,buf,len,flags) ... как используя > парметры этой функции узнать полный размер посылаемых > данных?! т.е. персылается какиянть инфа, в результате > прога вызывает несколько раз функцию send , вот один из > таких вызовов я перехватил. Как узнать размер всей > пересылаемой инфы?! Возможно ли вообще такое?! Может есть > какиенть функции которые позволяют по описателю сокета > получить размер всего буфера(не buf!) и еще какуюнть инфу?!
Помоему нет.
Хотя, когда я пересылал пакеты, то делал это так: вначале пакета добавляю заголовок, в котором содержиться необходимая мне инфа (вт.ч. и длина пакета). Т.е. если перехватить первый кусок пакета в котором будет заголовок, то зная структуру заголовка можно определить длину.
Таким образом, если ты перехватил первый пакет и знаешь структуру пакету, в котором указана длина то да.
|
| |
[Net] В таком случае, как сервер узнает скоко данных передает клиент?!!! 18.12.01 07:23
Автор: NeuronViking Статус: Незарегистрированный пользователь
|
|
| | |
[C++] [Net] В таком случае, как сервер узнает скоко данных передает клиент?!!! 19.12.01 01:35
Автор: SomeThing Статус: Незарегистрированный пользователь
|
Во-первых, речь ни о каких заголовках в сокетах вообще не идет. Функция send просто передает содержимое buf, а дальше все делает драйвер TCP/IP.
Так что перехват первого пакета на уровне драйвера даст тебе размер передаваемых данных.
Во-вторых, серверу до фени, сколько ты всего передаешь данных. Сокет на знает размер данных каждого конкретного send и работает до дисконекта. Фрагментацией занимается опять же драйвер.
Если подитожить, то ответ на твой вопрос: НИКАК НА УРОВНЕ СОКЕТОВ.
|
| | |
[Net] Я думаю, что... 18.12.01 11:02
Автор: Wizard(2) Статус: Незарегистрированный пользователь
|
возможны такие варианты:
1. Клиент сначала посылает размер всех данных, а после этого отсылает данные.
2. Клиент просто посылает все данные. после того как он их послал сообщает это серверу (посылает FIN). если клиенту и серверу нечего больше посылать, то соединение закрывается (по-моему так происходит при работе с интернет).
3. Возможно другие варианты, но я их не знаю :(.
|
|
|