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; // Переводим сервер в режим приёма файла } } }
|
|
| |