Копирование файлов с исползованием сокетов
И выдает ошибку связанную с стримом.
Можно ли не разбивая файлы копировать их?
Вот листинг
Отправка
////////
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);
////////
Заранее всем спасибо
по-моему это беда winsock api (внутренний буфер не резиновый!)... когда я писал подобные вещи, всегда использовал для передачи буфер не более 2048 байт... Так что проще передавай файл кусками - сперва контрольный блок (длина файла, имя и т.п.), а затем бей и передавай кусками - на приемнике склеивай. Так даже лучше.
Кажется так...
Я когда писал программку используя сокеты то мне нужно было пересылать с компа на комп данные разного размера то команды то данные то имена файлов...
вобщем может я что неправильно делал но у меня несколько отправляемых кусочков могли прийти одной строкой если они были меньше размера буфера...
например буфер 12 байт
отправляем
"delsystem"
и
"off"
в результате никогда не знаешь что получишь
"delsystem___"
и
"off_________"
или
"delsystemoff"
не помню отправлялись ли кусочки если буфер был наполнен не полностью...
я тогда просто схалтурил, не стал проверять откуда у ошибки ноги растут и в программе сделал дополнение отправляемой строки до размера буфера... Т.е. я так сразу каждую команду и отправлял
"delsystem___"
и
"off_________"
вобщем когда все сделаешь на всякий случай проверь нормально ли отправляется последний кусок файла (который будет меньше размера буфера) особенно если подряд отправляются два файла...
Правда я пользовался командами send и recv может в твоем варианте таких проблем и близко не будет...