Вторник, 07.05.2024
Просто сайт
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Программирование » Borland C++ Builder 6 » ClientSocket - Принятие файла (Сокеты)
ClientSocket - Принятие файла
demenevДата: Понедельник, 04.01.2010, 20:16 | Сообщение # 1
Группа: Удаленные





==================Функция принятия файла===
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TMemoryStream *MS = new TMemoryStream ; // создаем поток под принимаемый файл
void Write( AnsiString Text ); // ф-я записи получаемой информации в поток
int Size ; // размер передаваемого файла
bool Receive ; // передаем ли мы на данный момент файл
AnsiString FileName ;
void Write( AnsiString Text )
{
if(MS->Size < Size) // если мы еще принимаем файл и размер потока меньше размера файла
{
MS->Write( Text.c_str() , Text.Length() ); // записываем в поток
Form1->Memo1->Lines->Add( "Принимаем данные..." ); // пишем лог
}
if(MS->Size == Size) // если файл принят и размер потока соответствует размеру файла
{
Receive = false ; // останавливаем режим передачи
MS->Position = 0 ; // переводим каретку потока в начало
Form1->Client->Socket->SendText( "end" ); // пишем серверу, что мы приняли файл
CreateDir( "Downloads" ); // создаем папку для сохраненных файлов
MS->SaveToFile( GetCurrentDir()+"\\"+FileName ); // сохраняем туда наш файл
MS->Clear() ; // освобождаем поток
Size = 0 ;
Form1->Memo1->Lines->Add("Файл принят !"); // пишем в лог что файл принят
Form1->Image1->Picture->LoadFromFile(GetCurrentDir()+"\\pic.bmp");
}
}
=================Подключение =========
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Client->Open() ; // открываем
Memo1->Lines->Add( "Коннектимся..." );
}
=================Подключились===========
void __fastcall TForm1::ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo1->Lines->Add( "Вы присоеденились ;" );
}
================Ошибка клиента============
void __fastcall TForm1::ClientError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode = 0;
ShowMessage( "Client Error" );
}
================Принятие команд от сервера=========
void __fastcall TForm1::ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString Rtext ; // текст, который посылает сервер
Rtext = Client->Socket->ReceiveText() ;
if( Receive == true ) // если мы в режиме передачи файла, то
{
Write( Rtext ); // записываем его в поток
}
else // если нет , то
{
Memo1->Lines->Add( "Приняли текст :" + Rtext ); // пишем в лог все что принимаем от сервера
if(Rtext.SubString( 0,Rtext.Pos("#")-1) == "file" ) // Если это строка типа
// file#filename#filesize#, то начинаем парсерить полученную информацию :
{
Rtext.Delete( 1 , Rtext.Pos( "#" ) ) ; // удаляем слово file
Name = Rtext.SubString( 0 , Rtext.Pos( "#" ) -1 );// Определяем имя файла
FileName = Name.SubString( Name.LastDelimiter( "\\" ) + 1 , Name.Length() );
// Выделяем чистое имя файла , например с c:\\test.txt , берем test.txt
Rtext.Delete( 1 , Rtext.Pos( "#" ) ); // Удаляем последний разделитель
Size = StrToInt( Rtext.SubString( 0 , Rtext.Pos( "#" ) - 1) ) ; // Определяем размер файла
Rtext.Delete( 1 , Rtext.Pos( "#" ) ); // Удаляем последний разделитель
Memo1->Lines->Add( "Размер файла: " + IntToStr( Size ) + " байт" ); // Выводим размер файла в лог
Memo1->Lines->Add( "Имя файла: " + Name ); // Выводим имя файла в лог
Receive = true;
// Переводим сервер в режим приёма файла

}
}

}

 
Форум » Программирование » Borland C++ Builder 6 » ClientSocket - Принятие файла (Сокеты)
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024
Создать бесплатный сайт с uCoz