Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Первести с С++ на Delphi


Автор: zhefran 28.9.2007, 11:17
Код

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

#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 smile 

Автор: zhefran 8.10.2007, 17:40
Вопрос снят с повестки дня!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)