Показать сообщение отдельно
Старый 24.08.2009, 22:44   #2
Skythrone
ПроЭктировщик
 
Регистрация: 02.07.2008
Сообщений: 105
Написано 7 полезных сообщений
(для 14 пользователей)
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет

ViNT, спасибо за либу! Весьма полезна.

Но в процессе тестирования на реальных телефонах обнаружилось следующее:

1. Даже если не делать обработчик ошибок, всё равно на некоторых самсунгах может не запускаться. И через обфускатор proguard не проходит. Если создать хотя бы пустую процедуру onerror, то всё ОК. Надеюсь, эта информация пригодится тем, кто будет использовать данную либу.

2. Приём данных я делаю примерно так:

count := binsock.available;
content := '';
while (
count>0) do
begin
 content 
:= content binsock.read_bin(count);
 
count := binsock.available;
end
т.е. всё скачиваю в текстовую переменную.
Я так понял, что при загрузке сначала заполняется некий буфер, а потом уже из него можно скачивать в бинарный массив.
Подобный цикл while..end понадобился, поскольку размер буфера значительно меньше размера реально скачиваемого с сервера контента.
На эмуляторе kEmulator переменная count, отображающая binsock.available, принимает максимальное значение 8192. То есть когда я скачиваю с сервера 20 кб данных, цикл проходит 3 раза.
Но бинарная картинка, скачанная таким образом, нормально собирается и отображается на эмуляторе.

На мобильниках всё не так радужно. Например, на Samsung E-200 размер буфера всего 512 байт. Текстовый контент в приведённом мной выше цикле скачивается и собирается нормально, а вот картинка - нет, приходит битая.

Может, сможешь что-нибудь посоветовать?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ViNT (25.08.2009)