Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

"Передача файлов без FTP: использование сокетов в Delphi"

Delphi , Интернет и Сети , FTP

Передача файлов без FTP: использование сокетов в Delphi

Одним из способов прямой связи между приложениями через интернет без использования публичного IP-адреса является использование сокетов. В этом материале мы рассмотрим, как реализовать передачу файлов между компьютерами в разных сетях с помощью сокетов в Delphi.

Что такое сокеты?

Сокеты — это механизм, позволяющий приложениям обмениваться данными через сеть. В Delphi для работы с сокетами используется компонент TTCPClient (для клиента) и TTCPServer (для сервера), находящийся в модуле Winapi.Sockets.

Реализация передачи файлов без FTP

Для передачи файлов без FTP мы будем использовать сокеты для прямой связи между двумя компьютерами. Ниже приведен пример кода на Object Pascal (Delphi) для клиента и сервера.

Клиент

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Winapi.Sockets;

type
  TForm1 = class(TForm)
    btnSend: TButton;
    edtFileName: TEdit;
    procedure btnSendClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnSendClick(Sender: TObject);
var
  Socket: TTCPClient;
  FileStream: TMemoryStream;
  Buffer: array[0..1023] of byte;
  ReadBytes: integer;
begin
  Socket := TTCPClient.Create(nil);
  try
    Socket.Host := '192.168.1.100'; // IP-адрес сервера
    Socket.Port := 8080;
    Socket.Connect;
    if Socket.Connected then
    begin
      FileStream := TMemoryStream.Create;
      try
        FileStream.LoadFromFile(edtFileName.Text);
        while not FileStream.EOS do
        begin
          ReadBytes := FileStream.Read(Buffer[0], Length(Buffer));
          Socket.SendBuf(Buffer[0], ReadBytes, True);
        end;
      finally
        FileStream.Free;
      end;
      ShowMessage('Файл успешно передан!');
    end
    else
      ShowMessage('Не удалось подключиться к серверу.');
  finally
    Socket.Free;
  end;
end;

end.

Сервер

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Winapi.Sockets;

type
  TForm2 = class(TForm)
    btnListen: TButton;
    procedure btnListenClick(Sender: TObject);
  private
    { Private declarations }
    FServerSocket: TTCPServer;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.btnListenClick(Sender: TObject);
var
  ClientSocket: TTCPClient;
  FileStream: TMemoryStream;
  Buffer: array[0..1023] of byte;
  ReadBytes: integer;
  FileName: string;
begin
  FServerSocket := TTCPServer.Create(nil);
  try
    FServerSocket.OnExecute := ClientExecute;
    FServerSocket.Active := True;
    FServerSocket.Port := 8080;
  except
    on E: Exception do
      ShowMessage(E.ClassName + ': ' + E.Message);
  end;
end;

procedure TForm2.ClientExecute(AContext: TIdContext);
var
  ClientSocket: TTCPClient;
  FileStream: TMemoryStream;
  Buffer: array[0..1023] of byte;
  ReadBytes: integer;
  FileName: string;
begin
  ClientSocket := TTCPClient(AContext.Connection);
  try
    FileName := 'received_file.bin';
    FileStream := TMemoryStream.Create;
    try
      while not ClientSocket.IOHandler.EOS do
      begin
        ReadBytes := ClientSocket.ReceiveBuf(Buffer[0], Length(Buffer));
        FileStream.WriteBuf(Buffer[0], ReadBytes);
      end;
      FileStream.SaveToFile(FileName);
      ShowMessage('Файл успешно получен: ' + FileName);
    finally
      FileStream.Free;
    end;
  finally
    ClientSocket.Free;
  end;
end;

end.

В данном примере клиентское приложение отправляет файл на сервер, используя TTCPClient, а серверное приложение принимает файл, используя TTCPServer. Для передачи данных используется буфер Buffer, в котором хранятся данные, считываемые из файла (клиент) или записываемые в файл (сервер).

Примечание: Перед запуском сервера убедитесь, что порт 8080 свободен и разрешена передача данных между компьютерами в вашей сети.

Вывод

Использование сокетов в Delphi позволяет реализовать прямую связь между приложениями без необходимости использовать FTP или другие промежуточные сервисы. В данном материале мы рассмотрели пример передачи файлов между компьютерами в разных сетях с помощью сокетов.

Создано по материалам из источника по ссылке.

Материал описывает передачу файлов без FTP: использование сокетов в Delphi для прямой связи между приложениями через интернет без использования публичного IP-адреса.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: FTP ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:18:25/0.0054960250854492/1