AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Mit Server auf OnConnect reagieren wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Mit Server auf OnConnect reagieren wie?

Ein Thema von holger_barntrup · begonnen am 15. Mai 2019 · letzter Beitrag vom 22. Mai 2019
Antwort Antwort
Benutzerbild von holger_barntrup
holger_barntrup

Registriert seit: 1. Feb 2007
Ort: Barntrup
97 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Mit Server auf OnConnect reagieren wie?

  Alt 16. Mai 2019, 07:17
Das muss doch irgendwie möglich sein bei dynamisch erzeugtem Server auf das OnConnect Ereignis zu reagieren.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: Mit Server auf OnConnect reagieren wie?

  Alt 16. Mai 2019, 08:05
Das muss doch irgendwie möglich sein bei dynamisch erzeugtem Server auf das OnConnect Ereignis zu reagieren.
Natürlich, sobald du dem OnConnect-Event einen passenden Event-Handler zuweist, wird das auch passieren.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Mit Server auf OnConnect reagieren wie?

  Alt 16. Mai 2019, 14:31
Beispielcode (mit Konsolenausgabe anstatt Listbox).

Hinweise:
  • das Erzeugen eines neuen Bindings ist nicht notwendig, standardmäßig wird beim Starten eines Indy TCP Servers bereits ein Binding erzeugt, mit IP 0.0.0.0. Im Code wird dann nur noch der Port gesetzt (über die DefaultPort-Property)
  • als Port verwendet das Beispiel den Telnet-Port, daher kann man mit 'telnet localhost' auf der Kommandozeile die Verbindung testen
  • der Server meldet sich nach dem Verbindungsaufbau mit der Ausgabe 'Welcome to Indy TCP Server example' und trennt nach einer Sekunde die Verbindung wieder

Delphi-Quellcode:
unit Unit1;

interface

uses
  IdTCPServer, IdContext,
  Classes, SysUtils, Forms, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FServer: TIdTCPServer;

    procedure Log(const Msg: string);

    procedure OnConnect(AContext: TIdContext);
    procedure OnExecute(AContext: TIdContext);
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  FServer.Active := True;

  Log('Server is listening');
  Log('Bindings[0].IP=' + FServer.Bindings[0].IP);
  Log('Bindings[0].Port=' + IntToStr(FServer.Bindings[0].Port));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FServer := TIdTCPServer.Create(Self);

  FServer.OnExecute := OnExecute;
  FServer.OnConnect := OnConnect;

  FServer.DefaultPort := 23; // Telnet Port
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FServer.Active := False;
end;

procedure TForm1.Log(const Msg: string);
begin
  WriteLn(Msg); // Ausgabe setzt Linken als "Konsolenanwendung" voraus
end;

procedure TForm1.OnConnect(AContext: TIdContext);
begin
  Log('CONNECT');
  Log(AContext.Binding.PeerIP);

  AContext.Connection.IOHandler.WriteLn('Welcome to Indy TCP Server example');

  Log('Welcome message sent');
end;

procedure TForm1.OnExecute(AContext: TIdContext);
begin
  Sleep(1000);

  AContext.Connection.IOHandler.WriteLn('Bye');

  AContext.Connection.Disconnect;
end;

end.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von holger_barntrup
holger_barntrup

Registriert seit: 1. Feb 2007
Ort: Barntrup
97 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Mit Server auf OnConnect reagieren wie?

  Alt 17. Mai 2019, 05:50
Hallo Michael
Vielen Dank für dein Beispiel. Ich glaub das bringt mich schon mal ein wenig weiter.

Das hier verstehe ich nur gar nicht:
  WriteLn(Msg); // Ausgabe setzt Linken als "Konsolenanwendung" voraus
Wie linkt man als "Konsolenanwendung"
  Mit Zitat antworten Zitat
Benutzerbild von holger_barntrup
holger_barntrup

Registriert seit: 1. Feb 2007
Ort: Barntrup
97 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Mit Server auf OnConnect reagieren wie?

  Alt 17. Mai 2019, 10:38
Wie linkt man als "Konsolenanwendung"
Selber herausgefunden.

Der Server startet scheinbar nicht und eine Ausgabe in der Konsole hab ich auch nicht. Lässt sich jedenfalls nicht connecten.




Den einzigen Unterschiede zwischen dem von dir geposteten Quelltext und dem Meinigen ist:
Delphi-Quellcode:
{$R *.lfm}
{$R *.dfm


Geändert von holger_barntrup (17. Mai 2019 um 11:04 Uhr)
  Mit Zitat antworten Zitat
diesisteintester

Registriert seit: 8. Okt 2009
Ort: Karlsruhe
1 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Mit Server auf OnConnect reagieren wie?

  Alt 17. Mai 2019, 11:16
{$R *.lfm} kommt von der Lazerus IDE, {$R *.dfm} von Delphi ... macht soweit ja mal keinen Unterschied.

Hab den Code auch mal getestet und der geht ...

wenn du sagst der "Server startet nicht", was passiert denn im Debugger?

Exception oder EA Violation ???
Tom
  Mit Zitat antworten Zitat
Benutzerbild von holger_barntrup
holger_barntrup

Registriert seit: 1. Feb 2007
Ort: Barntrup
97 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Mit Server auf OnConnect reagieren wie?

  Alt 20. Mai 2019, 05:23
Folgendes passiert wenn ich den Button1 drücke:

Debug_Meldung1.JPG

Debug_Meldung2.JPG

  Mit Zitat antworten Zitat
Benutzerbild von holger_barntrup
holger_barntrup

Registriert seit: 1. Feb 2007
Ort: Barntrup
97 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Mit Server auf OnConnect reagieren wie?

  Alt 21. Mai 2019, 10:38
Beispielcode (mit Konsolenausgabe anstatt Listbox).

Hinweise: [LIST][*]das Erzeugen eines neuen Bindings ist nicht notwendig, standardmäßig wird beim Starten eines Indy TCP Servers bereits ein Binding erzeugt, mit IP 0.0.0.0. Im Code wird dann nur noch der Port gesetzt (über die DefaultPort-Property)
Und wie stell ich das denn an wenn ich eine bestimmte IP vorgeben will?
Mit
Delphi-Quellcode:
FServer.DefaultPort := 23; // Telnet Port
FServer.Bindings[0].IP := '172.16.101.111';
bekomm ich die Meldung "Argument ausserhalb des Bereichs" und die IP bleibt 0.0.0.0
In dem Beispiel oben im ersten Beitrag geht das, auch in dem mit den Komponenten auf der Form.
Ich glaub ich geb es bald auf mit dem erzeugen zur Laufzeit........
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Mit Server auf OnConnect reagieren wie?

  Alt 21. Mai 2019, 10:54
Delphi-Quellcode:
uses
  System.SysUtils, idTcpServer, idSocketHandle;

var
  fServer: TidTcpServer;
  binding: TidSocketHandle;
begin
  try
    fServer := TidTcpServer.create(nil);
    binding := fServer.Bindings.Add();
    binding.IP := '10.34.56.12';
    binding.Port := 23;
 except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
oder das böse with verwenden:
Delphi-Quellcode:
with fServer.bindings.add do
  begin
    ip := '10.34.56.12'
    port := 23;
  end;
Grüße
Klaus
Klaus

Geändert von Klaus01 (21. Mai 2019 um 11:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von holger_barntrup
holger_barntrup

Registriert seit: 1. Feb 2007
Ort: Barntrup
97 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Mit Server auf OnConnect reagieren wie?

  Alt 22. Mai 2019, 10:44
Danke Klaus

  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz