AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy TCPServer -> Client

Indy TCPServer -> Client

Ein Thema von Neutral General · begonnen am 4. Jun 2005 · letzter Beitrag vom 23. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Indy TCPServer -> Client

  Alt 4. Jun 2005, 11:45
Ich bekomme es beim besten Willen nicht hin vom Server eine Nachricht an den Client zu schicken

Mein Server :

Delphi-Quellcode:
unit mbknet;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdTCPServer, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, StdCtrls;

type
  TForm1 = class(TForm)
    IdTCPServer1: TIdTCPServer;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    IdTCPClient1: TIdTCPClient;
    procedure FormCreate(Sender: TObject);
    procedure IdTCPServer1Execute(AThread: TIdPeerThread);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  IDTCPServer1.Active := true;
end;

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
  with AThread.Connection do
  begin
    WriteLn('Hello from Basic Indy Server server.');
    end;
end;

end.
Mein Client

Delphi-Quellcode:
unit mbknet_client;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  StdCtrls, ExtCtrls, IdTCPServer;

type
  TForm1 = class(TForm)
    IdTCPClient1: TIdTCPClient;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button2: TButton;
    Timer1: TTimer;
    IdTCPServer1: TIdTCPServer;
    IdTCPClient2: TIdTCPClient;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
IDTCPClient1.Host := Edit1.Text;
 with IDTCPClient1 do begin
    Connect;
    Caption := ReadLn;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  IDTCPClient1.WriteLn('HALLO SERVER'); // kläglicher versuch an den Server eine Nachricht zu senden
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if IDTCPClient1.Connected then
  Form1.Caption := IDTCPClient1.ReadLn() // kläglicher Versuch Nachrichten vom Server zu empfangen
end;

end.
Das Meiste ist aus einem Tutorial übernommen... bis auf das was nicht funktioniert
Wobei ich das aus dem Tutorial wohl verstehe... Ich komme nur nicht mehr weiter
Michael
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Indy TCPServer -> Client

  Alt 4. Jun 2005, 11:51
kommt die Nachricht denn beim Server an? und hast du mal versucht die Nachricht im OnExecute des Clients abzufragen?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Indy TCPServer -> Client

  Alt 4. Jun 2005, 11:54
Das einzigste was ankommt ist

WriteLn('Hello from Basic Indy Server server.'); beim Client.
Und der Client hat gar kein OnExecute-Ereignis.
Außerdem wird soweit ich weiß OnExecute nur beim Verbinden ausgeführt.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Indy TCPServer -> Client

  Alt 4. Jun 2005, 11:58
jetzt bin ich verwirrt, erst schreibst du
Zitat:
Ich bekomme es beim besten Willen nicht hin vom Server eine Nachricht an den Client zu schicken
und dann schreibst du das
Zitat:
WriteLn('Hello from Basic Indy Server server.');
beim client ankommt. Das heißt doch aber das die nachricht vom Server doch an den Client geschickt wurde

Zum OnExecute
Zitat:
OnExecute is an event handler for TIdServerThreadEvents. OnExecute occurs when a TIdPeerThread attempts to perform the TIdPeerThread.Run method. OnExecute receives AThread as a parameter, representing the TIdPeerThread thread that will be started.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Indy TCPServer -> Client

  Alt 4. Jun 2005, 14:36
TIdTCPServer.Execute() wird immer ausgeführt, wenn es was zu tun gibt. Dass kann ein vonnect sein, das kann aber auch eine nachricht sein

Und was den Client angeht: der muss immer in einer Schleife ein ReadLn() machen, damit er Nachrichten bekommt.

Du müsstest z.B. dem Client über AThread.Connection.WriteLn() direkt eine antwot sen den können
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Indy TCPServer -> Client

  Alt 4. Jun 2005, 19:44
Ja danke !!
Ich glaube ich habs raus
Michael
  Mit Zitat antworten Zitat
prinz_inzide

Registriert seit: 24. Jan 2005
64 Beiträge
 
#7

Re: Indy TCPServer -> Client

  Alt 4. Jun 2005, 19:54
am besten bringste die schleife in nem eigenen thread unter!
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Indy TCPServer -> Client

  Alt 5. Jun 2005, 11:36
Naja sagen wir ich habs zur hälfte raus
Ich kann zwar jetzt dem Server Nachrichten senden aber der Server nicht dem Clienten.
Außer halt direkt bei OnExecute. Aber das bringt mir bei einem Chat nichts. Da sollen ja Nachrichten geschickt werden wenn der Benutzer es will.

Der Server kann nun so Nachrichten empfangen :

Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
  with AThread.Connection do
  begin
   WriteLn('Hello from Basic Indy Server server.');
   Form1.Caption := ReadLn;
  end;
end;
Der Client kann einfach so

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  IDTCPClient1.WriteLn('HALLO SERVER');
end;
dem Server eine Nachricht schicken, die auch ankommt.
Aber gibt es keine Möglichkeit vom Server dem Clienten eine Nachricht zu schicken auf ButtonClick ?
Michael
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#9

Re: Indy TCPServer -> Client

  Alt 5. Jun 2005, 16:12
Moin, moin,

also Indy ist eigentlich nicht mein Gebiet, aber wie ist es denn wenn Du auf beiden Seiten
jeweils Client und Server ins Formular nimmst?

Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Indy TCPServer -> Client

  Alt 5. Jun 2005, 16:14
Ja ich denke das würde gehen aber geht es nicht anders ?
Im Notfall würde ich das machen ...
Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:26 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