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

Ваш аккаунт

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

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

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

TClientSocket & TServerSocket посылка картинки

3.7K
04 октября 2004 года
yevdo
2 / / 21.04.2003
Другу, сам мучался пока зделал... и решил сделать так, что бы другие не мучались... вобщем вот вам, посылка файла по TClientSocket & TServerSocket:

правда писал это дело не я....
Отправить можно при помощи вот такой функции:
//---------------------------------------------------------------------------
Цитата:

bool SendFile(AnsiString FileName, TCustomWinSocket* Socket)
{
int F=open(FileName.c_str(),O_RDONLY|O_BINARY);
if (F==-1) return false;

long FileSize,BytesToSend,Offset=0,Ret=0;
void *Buf;

FileSize=filelength(F);
Buf=malloc(FileSize);

BytesToSend=read(F,Buf,FileSize);
close(F);
if(BytesToSend<=0) {free(Buf);return false;}

while (Offset<BytesToSend && Socket->Connected){
Ret=Socket->SendBuf(Buf,BytesToSend-Offset);
if (Ret==-1){
Sleep(1);
Ret=0;
}
if (Socket->RemoteAddress==Socket->LocalAddress)
Sleep(1);
Offset+=Ret;
(Byte*)Buf+=Ret;
}
(Byte*)Buf-=Offset;
free(Buf);
return true;
}


//---------------------------------------------------------------------------
Вызвать эту функцию можно напрмер так:

//---------------------------------------------------------------------------

Цитата:

if (!OpenDialog1->Execute()) return;
SendFile(OpenDialog1->FileName,ClientSocket1->Socket);


//---------------------------------------------------------------------------

А на принимающей стороне в событии сокета OnRead (для ClientSocket) или OnClientRead(для ServerSocket) нужно вставить примерно такой код:
//---------------------------------------------------------------------------

Цитата:

int Len,Offset=0,Ret=0;
void *Buf;

Len=Socket->ReceiveLength();
Buf=malloc(Len);

while (Offset<Len) {
Ret=Socket->ReceiveBuf(Buf,Len-Offset);
Offset+=Ret;
(Byte*)Buf+=Ret;
}
(Byte*)Buf-=Offset;

AnsiString FileName="c:\\DestFile.txt";
int F;
if (FileExists(FileName))
F=open("c:\\DestFile.txt",O_WRONLY|O_BINARY);
else
F=open("c:\\DestFile.txt",O_WRONLY|O_CREAT|O_BINARY);

if (F==-1) {free(Buf);return;}

lseek(F,filelength(F),SEEK_SET);
write(F,Buf,Len);
close(F);
free(Buf);


//---------------------------------------------------------------------------
http://borland.xportal.ru/forum/viewtopic.php?t=5270&postdays=0&postorder=asc&highlight=clientsocket%20sendstream&start=0

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