передача файла по TCP |
Здравствуйте, гость ( Вход | Регистрация )
передача файла по TCP |
Rastorev |
30.3.2009, 23:22
Сообщение
#11
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 27.2.2009 Пользователь №: 579 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата Вы знаете, что произойдёт, если в tofile попадёт -1 ? Указывающая на то, что при получении произошла ошибка. Вы все правильно описали что должно произойти. Вся загвостка оказалась куда более простая чем я думал!!С принимающей стороны надо было ожидать пока все пришедшие bytesavalible() данные будут готовы для чтения |
|
|
DICKobraz |
12.8.2009, 1:27
Сообщение
#12
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 12.8.2009 Пользователь №: 997 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день! У меня похожая проблема с ограничением в размере,можно узнать как от нее избавится?Что-то добавить в цикл while?
|
|
|
kuzulis |
12.8.2009, 7:44
Сообщение
#13
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Цитата Добрый день! У меня похожая проблема с ограничением в размере,можно узнать как от нее избавится?Что-то добавить в цикл while? Какое такое ограничение? посмотрите исходники examples\network\loopback\ |
|
|
DICKobraz |
12.8.2009, 20:45
Сообщение
#14
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 12.8.2009 Пользователь №: 997 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вобщем, вот часть клиента:
Любой переданый от сервера фаил обрезается до 64k.Как я понимаю проблема такая же как была описана выше,вот и хотелось бы узнать каким образом ожидать пока все пришедшие bytesavalible() данные будут готовы для чтения?
Причина редактирования: Используй тэг code
|
|
|
igor_bogomolov |
12.8.2009, 21:53
Сообщение
#15
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Цитата (int)sizeof(quint16) Все правильною Ты сам себя ограничил 64к максимальное значение blockSize = 0xffff, т.е. 65535 или 64k |
|
|
Litkevich Yuriy |
13.8.2009, 8:37
Сообщение
#16
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
igor_bogomolov |
13.8.2009, 8:58
Сообщение
#17
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
будет равно 2 (байта), а не 64к А я такого и не писал Цитата максимальное значение blockSize = Максимальное значение которое можно записать в два байта 65535 или 65535 / 1024 = 64 к Вот оно и ограничение. Тогда уж
|
|
|
kuzulis |
13.8.2009, 13:37
Сообщение
#18
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Цитата Тогда уж int blockSize = 0; .... .... if (tcpSocket->bytesAvailable() < sizeof(int)) return; in >> blockSize; а тут вы ограничиваете 4-мя байтами, т.к. sizeof(int) = 4 ну никак не 64K |
|
|
igor_bogomolov |
13.8.2009, 17:55
Сообщение
#19
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
kuzulis,
blockSize у нас определяет, какое количество бат мы должны получить. // здесь мы проверяем, пришло ли достаточное количество данных, чтобы считать значение blockSize
// иначе считываем, в данном случае 4 байта, т.е. int
Максимальное значение инта 4294967295. теперь мы ограничены этим количеством байт. Ранее были ограничены 65536 байтами или 64 килобайтами |
|
|
DICKobraz |
14.8.2009, 19:46
Сообщение
#20
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 12.8.2009 Пользователь №: 997 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата (int)sizeof(quint16) Все правильною Ты сам себя ограничил 64к максимальное значение blockSize = 0xffff, т.е. 65535 или 64k Спасибо большое!Просто исправил на unsigned int все как надо работает!Я в начале за основу взял пример сервера передающего текстовые сообщения поэтому так и оставался 16 битовый инт. |
|
|
Текстовая версия | Сейчас: 18.1.2025, 9:45 |