![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 1 Всего: 50 |
Все равно нет ответа от сервера.... ![]() Это сообщение отредактировал(а) Alca - 25.6.2009, 21:14 |
|||
|
||||
fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
Alca, может данные просто дойти не успевают?
Пробовал вызывать CXTcpClientSocket::sRecvBytes через некоторые промежутки времени? |
|||
|
||||
Alca |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 1 Всего: 50 |
::ioctlsocket говорит что нет данных для чтения
хотя ответ от сервера еще не пришел.
До ::recv дело не доходит |
||||||
|
|||||||
Alca |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 1 Всего: 50 |
Если я принимаю данные большого размера (файл) в буфер фиксированого размера:
Кол-во принятых байт будет всегда равно размеру принимающего буфера или нет (я не беру, тот факт, что концовка данных (файла) будет меньше размера буфера, это и так ясно) ?
|
||||
|
|||||
fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
нет, не так.
Функция чтения из сокета не обязанна возвращать значение считанных байт, равное требуемому. Именно для обработки данного условия она это значение и возвращяет. Представь себе ситуацию, что ты передаешь фильму метров эдак на 500. Естественно она вся в буфер приема ОС для этого сокета не влезет. Тогда как спрашивается функция приема данных вернет тебе запрошенные у нее 500 метров? Чтобы считать данные необходимо выделить буфер, запросить все данные, функция вернет значение считанных байт, если оно меньше требуемого, то корректишь входные данные функции в соответствии с ним (корректируешь смещение в буфере на возвращенное значение и уменьшаешь значение количества байт на считывание) и т.д.. Иными словами необходимо вызывать функцию приема данных такое количество раз, которое обеспечит тебе необходимое количество байт данных. Если сокет будет неблокируемым, то пр и этом будет очень много итераций. Неблокированный сокет тебе пригодится если необходимо обеспечить некоторое количество соединений, но алгоритм будет несколько иной. Можешь породить поток, где вызовешь функцию на блокируемом сокете. Некоторые параметры работы данного алгоритма можно настаивать. Я уже посоветовал книгу ("UNIX. Разработка сетевых приложений", Стивенс) - в ней все есть. Это сообщение отредактировал(а) fry - 26.6.2009, 15:08 |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 1 Всего: 50 |
Хм.... Кажись я близок к цели.....
![]() Смотрю, я первую ответку сервера, которая пришла типа не полностью.... Как вы думаете, какой размер этих данных? 1024 байта. Следов. сервак шлет мне эти данные блоками по 1024 байт. Ну поставил я у себя такой же размер буфера и все заработало. Вот код:
Добавлено через 1 минуту и 3 секунды Но как быть если размер буфера у меня не 1024 байта? ![]() |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
Я рад за тебя... ![]() |
|||
|
||||
fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
в одном пакете TCP умещается около 1500 байт
|
|||
|
||||
Alca |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 1 Всего: 50 |
Но как быть если размер буфера у меня не 1024 байта? Добавлено через 1 минуту и 23 секунды
|
||||||
|
|||||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
Alca,
А в репу ? ![]() Добавлено через 19 секунд ЗЫ ради приличия хотя бы по RTF эмь |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 1 Всего: 50 |
![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |