Noxx
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Передача файла через сокет10.12.2011, 05:02. Показов 16665. Ответов 6
Метки нет (Все метки)
Итак... у меня сложилась одна затруднительная ситуация. Есть сервер, есть клиент. С передает К файл посредством
Если честно сутки просидел над этими 10 строчками кода, но так и не понял почему файл получается нерабочим во 2 варианте |
10.12.2011, 05:02 | |
Ответы с готовыми решениями:
6
Передача значений переменных через сокет пересылка файла через сокет Отправка сообщения через сокет Вывод строк через сокет |
T34
|
|
21.12.2011, 14:17 | 2 |
надо послать текстовый файл с содержанием 1234567890123456.... и так далее
и проверить пришедший файл. после этого понять что происходит. То что вы просто отрезали кусок файла по размеру не означает что вы отрезали что надо и не пропустили что не надо). бывают варианты. не хватает величины приемного буфера и данные теряются. надо слать пакетами. неправильно интерпретируется файл, то есть вы посылаете бинарный файл а посылается он как текстовый и соответственно каждый встреченный символ 0x0d дополняется символом 0x0A конец строки - возврат каретки. В вашем случае есть еще такая фигня при работе с потоками отдание приказа послать и посылка - разные вещи. посмотрите в сторону функции flush, она принудительно заставляет перепихать буфер потока туда куда он его пихал и очистить буфер. |
Noxx
|
|
21.12.2011, 23:14 | 3 |
я проверил бинарным редактором принятый файл, получилось что посреди файла встречаются в случайном порядке блоки размером с буфер приема, в которых все биты имеют значение 0
|
T34
|
|
22.12.2011, 10:48 | 4 |
тогда надо на принимающей стороне найти признак буфер готово. Наверное вы запускаете процедуру чтения когда буфер пустой и поток возвращает нулевой буфер и признак ошибки, а вы этот факт пропускаете и принимаете буфер как полный... или что-то типа того.
хуже было бы если бы были случайные кропления нулей.. или просто какой то белеберды... |
Noxx
|
|
18.01.2012, 20:51 | 5 |
да, спасибо. вроде как раз то, что нужно. Буфер не успевал заполняться до того, как я начинал записывать этот буфер в поток. отсюда и случайные блоки пустых битов.
|
Noxx
|
|||||||||||
18.01.2012, 21:25 | 6 | ||||||||||
вот, вдруг кому понадобится
Клиент
|
2 / 2 / 0
Регистрация: 01.12.2014
Сообщений: 32
|
||||||
18.12.2015, 00:57 | 7 | |||||
Все равно ошибка есть. нужно так:
0
|
18.12.2015, 00:57 | |
18.12.2015, 00:57 | |
Помогаю со студенческими работами здесь
7
Ошибка соединения через сокет Как передать массив через сокет? Повторное подключение к серверу через сокет Как передать массив через сокет? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |