iGrok писал(а):Ты вот даже не проверил, что получается при выполнении Byt = String(1024, " ")..
Проверил... и давно знаю. Это связано с тем, что VB хранит строки в UniCode – 16 бит, а не 8 на один символ. В данном случаи это НЕ имеет никакого значения. Потому, что при чтении бинарных данных в строку VB автоматически производит конвертирование. Поэтому ты прав: размер буфера WinSock действительно превышается и это натолкнуло на мысль... За что спасибо, но об этом ниже...
И зачем ты вообще заполняешь массив какой-то ерундой перед тем, как сделать Get?
Это не моя личная прихоть. Так указано в MSDN! Все вопросы лично Биллу Гейтсу – пришли ему на e-mail.
Ну а если уж ты отправляешь его кусками - корректируй размер последнего куска. Иначе у тебя файл приходит большего размера, чем был. =)
В конец того или иного переданного файла просто дописываются нули, которые абсолютно
никак(!) НЕ сказываются на его работе в итоге. Я пробовал копировать и архивы (RAR) и видео-файлы, EXE, инсталлы, картинки – все что попадалось... Все(!) файлы читались, распаковывались, воспроизводились БЕЗ ПРОБЛЕМ!
Критичным к своему размеру оказался только Total Commander – у него противовирусный иммунитет встроен в exe-шник, видимо проверяющий контрольную сумму. Но это единичный частный случай.
tyomitch писал, что можно отправлять файл целиком
tyomitch был прав, только НЕ прав, что просто писал, а не показал, как...
Теперь ясно, что код можно оптимизировать и упростить еще больше, что сейчас и сделаю... но все равно: файлы больших размеров (например фильм – 700 МБайт) таким способом НЕ передаются.
iGrokИ в твоем, кстати, примере из предыдущего топика, что ты указал ссылкой, тоже самое... Пробовал передать фильм, а пришло всего 20 МБайт и те НЕ воспроизводятся!
P.S.
После такой... поправки кода Server’a, нормально заработал даже Total Commander.