Код | //---------------------------------------------------------------------------
#include <vcl.h> #include <stdio.h> #pragma hdrstop
#include "UIndyMsg2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1;
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::BPostClick(TObject *Sender) { IdTCPClient1->Host = EHost->Text; try { try { IdTCPClient1->Connect(); IdTCPClient1->WriteLn(EWho->Text); IdTCPClient1->WriteLn(Memo1->Text + '\0'); RichEdit2->Lines->Add(FormatDateTime("",Now())+": " + EWho->Text); RichEdit2->Lines->Add(Memo1->Text); } catch(...) { RichEdit2->Lines->Add("Ошибка соединения или передачи данных"); } } __finally { IdTCPClient1->Disconnect(); } } //---------------------------------------------------------------------------
void __fastcall TForm1::BSaveClick(TObject *Sender) { if(SaveDialog1->Execute()) RichEdit2->Lines->SaveToFile(SaveDialog1->FileName); } //---------------------------------------------------------------------------
void __fastcall TForm1::BClearClick(TObject *Sender) { RichEdit2->Clear(); } //---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender) { FlashWindow(Application->Handle,true); } //---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Activate(TObject *Sender) { Timer1->Enabled = false; } //---------------------------------------------------------------------------
void __fastcall TForm1::BFileClick(TObject *Sender) { if(OpenDialog1->Execute()) { IdTCPClient1->Host = EHost->Text; try { try { IdTCPClient1->Connect(); IdTCPClient1->WriteLn("Передача файла"); IdTCPClient1->WriteLn(EWho->Text); IdTCPClient1->WriteLn(ExtractFileName(OpenDialog1->FileName)); TFileStream *SF = new TFileStream(OpenDialog1->FileName.c_str(), fmOpenRead); IdTCPClient1->WriteStream(SF, true, true); SF->Free(); RichEdit2->Lines->Add(FormatDateTime("",Now())+": " + EWho->Text); RichEdit2->Lines->Add("Отправлен файл " + OpenDialog1->FileName); if(CheckBox1->Checked) RichEdit2->Lines->Add(IdTCPClient1->ReadLn()); } catch(...) { RichEdit2->Lines->Add("Ошибка соединения или передачи данных"); } } __finally { IdTCPClient1->Disconnect(); } } } //---------------------------------------------------------------------------
void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread) { if ( ! Application->Active ) { Timer1->Enabled = true; Beep(); } AnsiString SFrom, S; try { try { SFrom = AThread->Connection->ReadLn(); if (SFrom == "Передача файла") { // Прием текста о передаваемом файле SFrom = AThread->Connection->ReadLn(); RichEdit2->Lines->Add("Получено " + FormatDateTime("",Now()) + ": " + AThread->Connection->Binding->PeerIP + " - \"" + SFrom + "\""); S = AThread->Connection->ReadLn(); RichEdit2->Lines->Add("Файл " + S); // Прием файла if(Application->MessageBox(("Пользователь " + SFrom + " присылает вам файл "+ S + ". Сохранить?").c_str(), "Сохранение файла", MB_YESNOCANCEL + MB_ICONQUESTION) == IDYES) { SaveDialog2->FileName = S; if(SaveDialog2->Execute()) { TFileStream *SF = new TFileStream(SaveDialog2->FileName.c_str(), fmCreate); AThread->Connection->ReadStream(SF, -1, false); SF->Free(); RichEdit2->Lines->Add("Принятый файл сохранен в " + SaveDialog2->FileName); } } AThread->Connection->WriteLn("Файл " + S + " получен"); } else { // Прием текстового сообщения S = AThread->Connection->ReadLn(CHAR0); RichEdit2->Lines->Add("Получено " + FormatDateTime("",Now()) + ": " + AThread->Connection->Binding->PeerIP + " - \"" + SFrom + "\""); RichEdit2->Lines->Add(S); } } catch(...) { RichEdit2->Lines->Add("Ошибка передачи данных"); } } __finally { AThread->Connection->Disconnect(); } } //---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender) { IdTCPServer1->Active = true; } //---------------------------------------------------------------------------
|
Или простенький пример на Delphi IdTcpClient/IdTcpServer |