Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Копирование файлов с исползованием сокетов

2.1K
17 ноября 2002 года
browser
12 / / 17.11.2002
Возникла проблема при отправке файлов. Файл копируется не полностью(только первые n байт).
И выдает ошибку связанную с стримом.

Можно ли не разбивая файлы копировать их?


Вот листинг
Отправка
////////
TFileStream *f = new TFileStream(temp,fmOpenRead);
int s=f->Size;
byte *a=new byte(s);
f->ReadBuffer(a,s);
Form1->ServerSocket4->Socket->Connections[0]->SendBuf(a,s);
////////

Прием
////////
TFileStream *file = new TFileStream(dirr, fmCreate);
int count = Socket->ReceiveLength();
byte *buf = (byte*) malloc (count);
Socket->ReceiveBuf(buf, count);
file->WriteBuffer(buf, count);
////////


Заранее всем спасибо
476
18 ноября 2002 года
man2002ua
218 / / 16.10.2002
по-моему это беда winsock api (внутренний буфер не резиновый!)... когда я писал подобные вещи, всегда использовал для передачи буфер не более 2048 байт... Так что проще передавай файл кусками - сперва контрольный блок (длина файла, имя и т.п.), а затем бей и передавай кусками - на приемнике склеивай. Так даже лучше.
442
19 ноября 2002 года
HexoGenus
121 / / 20.03.2000
Цитата:
Originally posted by man2002ua
по-моему это беда winsock api (внутренний буфер не резиновый!)... когда я писал подобные вещи, всегда использовал для передачи буфер не более 2048 байт... Так что проще передавай файл кусками - сперва контрольный блок (длина файла, имя и т.п.), а затем бей и передавай кусками - на приемнике склеивай. Так даже лучше.



Кажется так...
Я когда писал программку используя сокеты то мне нужно было пересылать с компа на комп данные разного размера то команды то данные то имена файлов...
вобщем может я что неправильно делал но у меня несколько отправляемых кусочков могли прийти одной строкой если они были меньше размера буфера...
например буфер 12 байт
отправляем
"delsystem"
и
"off"
в результате никогда не знаешь что получишь
"delsystem___"
и
"off_________"
или
"delsystemoff"
не помню отправлялись ли кусочки если буфер был наполнен не полностью...
я тогда просто схалтурил, не стал проверять откуда у ошибки ноги растут и в программе сделал дополнение отправляемой строки до размера буфера... Т.е. я так сразу каждую команду и отправлял
"delsystem___"
и
"off_________"

вобщем когда все сделаешь на всякий случай проверь нормально ли отправляется последний кусок файла (который будет меньше размера буфера) особенно если подряд отправляются два файла...

Правда я пользовался командами send и recv может в твоем варианте таких проблем и близко не будет...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог