Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi System.Net.Sockets (https://www.delphipraxis.net/213296-system-net-sockets.html)

sdean 4. Jul 2023 09:28

System.Net.Sockets
 
Hello every one , please i need an example on how to Send/Receive TCP packet with TSocket from System.Net.Socket (cross platform) in an AsyncCallback way or in a separate thread .

Thank you in advance .

Sherlock 4. Jul 2023 09:48

AW: System.Net.Sockets
 
Hi, please consider asking your question over at our english speaking sister site: https://en.delphipraxis.net/

Sherlock

sdean 4. Jul 2023 10:20

AW: System.Net.Sockets
 
Zitat:

Zitat von Sherlock (Beitrag 1524172)
Hi, please consider asking your question over at our english speaking sister site: https://en.delphipraxis.net/

Sherlock

Thank you Sherlock , DONE .

But still waiting for any helpful response over here too .:wink:

Union 4. Jul 2023 11:01

AW: System.Net.Sockets
 
Or consider asking AI :-D, see below.

Delphi-Quellcode:
unit MainForm;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  System.Net.Socket;

type
  TForm1 = class(TForm)
    ButtonSend: TButton;
    MemoLog: TMemo;
    procedure ButtonSendClick(Sender: TObject);
  private
    FSocket: TSocket;
    procedure AsyncCallback(const ASyncResult: IAsyncResult);
    procedure DisplayReceivedData(const AData: TBytes);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.ButtonSendClick(Sender: TObject);
var
  DataToSend: TBytes;
begin
  DataToSend := TEncoding.UTF8.GetBytes('Hello, server!');

  if not Assigned(FSocket) then
  begin
    FSocket := TSocket.Create(TIPAddress.Any, 0);
    FSocket.Connect('127.0.0.1', 1234);
    FSocket.BeginSend(DataToSend, 0, Length(DataToSend), AsyncCallback, nil);
  end;
end;

procedure TForm1.AsyncCallback(const ASyncResult: IAsyncResult);
var
  BytesReceived: Integer;
  ReceivedData: TBytes;
begin
  try
    BytesReceived := FSocket.EndReceive(ASyncResult);
    if BytesReceived > 0 then
    begin
      SetLength(ReceivedData, BytesReceived);
      FSocket.ReceiveBuffer.Read(ReceivedData, 0, BytesReceived);
      TThread.Queue(nil,
        procedure
        begin
          DisplayReceivedData(ReceivedData);
        end);
    end;
  except
    on E: Exception do
    begin
      TThread.Queue(nil,
        procedure
        begin
          MemoLog.Lines.Add('Error: ' + E.Message);
        end);
    end;
  end;
end;

procedure TForm1.DisplayReceivedData(const AData: TBytes);
begin
  MemoLog.Lines.Add('Received: ' + TEncoding.UTF8.GetString(AData));
end;

end.

sdean 4. Jul 2023 12:09

AW: System.Net.Sockets
 
Zitat:

Zitat von Union (Beitrag 1524179)
Or consider asking AI :-D, see below.

Delphi-Quellcode:
unit MainForm;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  System.Net.Socket;

type
  TForm1 = class(TForm)
    ButtonSend: TButton;
    MemoLog: TMemo;
    procedure ButtonSendClick(Sender: TObject);
  private
    FSocket: TSocket;
    procedure AsyncCallback(const ASyncResult: IAsyncResult);
    procedure DisplayReceivedData(const AData: TBytes);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.ButtonSendClick(Sender: TObject);
var
  DataToSend: TBytes;
begin
  DataToSend := TEncoding.UTF8.GetBytes('Hello, server!');

  if not Assigned(FSocket) then
  begin
    FSocket := TSocket.Create(TIPAddress.Any, 0);
    FSocket.Connect('127.0.0.1', 1234);
    FSocket.BeginSend(DataToSend, 0, Length(DataToSend), AsyncCallback, nil);
  end;
end;

procedure TForm1.AsyncCallback(const ASyncResult: IAsyncResult);
var
  BytesReceived: Integer;
  ReceivedData: TBytes;
begin
  try
    BytesReceived := FSocket.EndReceive(ASyncResult);
    if BytesReceived > 0 then
    begin
      SetLength(ReceivedData, BytesReceived);
      FSocket.ReceiveBuffer.Read(ReceivedData, 0, BytesReceived);
      TThread.Queue(nil,
        procedure
        begin
          DisplayReceivedData(ReceivedData);
        end);
    end;
  except
    on E: Exception do
    begin
      TThread.Queue(nil,
        procedure
        begin
          MemoLog.Lines.Add('Error: ' + E.Message);
        end);
    end;
  end;
end;

procedure TForm1.DisplayReceivedData(const AData: TBytes);
begin
  MemoLog.Lines.Add('Received: ' + TEncoding.UTF8.GetString(AData));
end;

end.

Thank you Union have you tried to compile the code ?

Union 4. Jul 2023 12:13

AW: System.Net.Sockets
 
No, didn't try. But the code generated could be a starting point to build on.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz