Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
Читай ffff байт не прогадаешь 08.05.02 08:11 Число просмотров: 977
Автор: Killer{R} Статус: Незарегистрированный пользователь
|
Читай ffff байт не прогадаешь, а recv возвратит сколько рельно прочитано.
|
<programming>
|
[Net] Проблема с WSAAsyncSelect 07.05.02 10:56
Автор: mijk Статус: Незарегистрированный пользователь
|
Если в сокет (IPPROTO_TCP) пришло, например, 50 байтов, а я в обработчике сообщения FD_READ даю команду recv (или WSARecv) с размером буфера 20 байтов, то сначала возвращаются последние 10 байтов сообщения, вновь возникает событие FD_READ, последующая команда recv возвращает байты 20-39, в следующий раз возвращаются первые 20 байтов. В чем проблема? Или так и должно быть? Как тогда правильно обрабатывать данные, я же не могу предугадать размер поступивших данных? На codeguru посоветовали использовать модель select, но меня устраивает именно асинхронная модель WSAAsyncSelect, все равно алгоритм на интерфейс завязан.
|
|
[Net] Проблема с WSAAsyncSelect (ошибка в программе) 13.05.02 10:05
Автор: vp016 Статус: Незарегистрированный пользователь
|
исходя из того что написано в РФС данные могут приходить частями из-за фрагментации (т.е. блок отправил - он пришел частями). Это не зависит от того как ты данные получаешь (асинхронно - это завист от того как система отдает с сокета данные и никоим образон не влияет на получение данных самой системой). Вот последовательность данных - ВСЕГДА дожна сохранятся (определение протокола).
Так что ищи ошибку у себя в проге.
|
|
Читай ffff байт не прогадаешь 08.05.02 08:11
Автор: Killer{R} Статус: Незарегистрированный пользователь
|
Читай ffff байт не прогадаешь, а recv возвратит сколько рельно прочитано.
|
|
[Net] А в чем проблема? 07.05.02 11:55
Автор: xgiroo Статус: Незарегистрированный пользователь
|
> Если в сокет (IPPROTO_TCP) пришло, например, 50 байтов, а я > в обработчике сообщения FD_READ даю команду recv (или > WSARecv) с размером буфера 20 байтов, то сначала > возвращаются последние 10 байтов сообщения, вновь возникает > событие FD_READ, последующая команда recv возвращает байты > 20-39, в следующий раз возвращаются первые 20 байтов. В чем > проблема? Или так и должно быть? Как тогда правильно > обрабатывать данные, я же не могу предугадать размер > поступивших данных? На codeguru посоветовали использовать > модель select, но меня устраивает именно асинхронная модель > WSAAsyncSelect, все равно алгоритм на интерфейс завязан.
А в чем проблема? Не используй WSAAsyncSelect, используй либо
просто WSARecv, либо создавай новую нить и в ней можно пускать recv,
данные будут приниматься нормально.
|
| |
[Net] Это понятно, спасибо, ... но не об этом ведь спросил 07.05.02 15:08
Автор: mijk Статус: Незарегистрированный пользователь
|
WSAAsyncSelect вообще неработоспособна, что ли? Кто-нибудь вообще использовал?!! Просто программа получается очень простой на этой модели, не нужно синхронизации потоков... :(
|
|
|