![]() |
Indy TCPServer -> Client
Ich bekomme es beim besten Willen nicht hin vom Server eine Nachricht an den Client zu schicken :roll:
Mein Server :
Delphi-Quellcode:
Mein Client
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.
Delphi-Quellcode:
Das Meiste ist aus einem Tutorial übernommen... bis auf das was nicht funktioniert :mrgreen:
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. Wobei ich das aus dem Tutorial wohl verstehe... Ich komme nur nicht mehr weiter :( |
Re: Indy TCPServer -> Client
kommt die Nachricht denn beim Server an? und hast du mal versucht die Nachricht im OnExecute des Clients abzufragen?
|
Re: Indy TCPServer -> Client
Das einzigste was ankommt ist
Delphi-Quellcode:
beim Client.
WriteLn('Hello from Basic Indy Server server.');
Und der Client hat gar kein OnExecute-Ereignis. Außerdem wird soweit ich weiß OnExecute nur beim Verbinden ausgeführt. |
Re: Indy TCPServer -> Client
jetzt bin ich verwirrt, erst schreibst du
Zitat:
Zitat:
Zum OnExecute Zitat:
|
Re: Indy TCPServer -> Client
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 ;) |
Re: Indy TCPServer -> Client
Ja danke !!
Ich glaube ich habs raus :) |
Re: Indy TCPServer -> Client
am besten bringste die schleife in nem eigenen thread unter!
|
Re: Indy TCPServer -> Client
Naja sagen wir ich habs zur hälfte raus :mrgreen:
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:
Der Client kann einfach so
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin with AThread.Connection do begin WriteLn('Hello from Basic Indy Server server.'); Form1.Caption := ReadLn; end; end;
Delphi-Quellcode:
dem Server eine Nachricht schicken, die auch ankommt.
procedure TForm1.Button2Click(Sender: TObject);
begin IDTCPClient1.WriteLn('HALLO SERVER'); end; Aber gibt es keine Möglichkeit vom Server dem Clienten eine Nachricht zu schicken auf ButtonClick ? |
Re: Indy TCPServer -> Client
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 |
Re: Indy TCPServer -> Client
Ja ich denke das würde gehen aber geht es nicht anders ?
Im Notfall würde ich das machen ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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