Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi client.readln geht nicht (https://www.delphipraxis.net/11788-client-readln-geht-nicht.html)

Spurius 13. Nov 2003 17:54


client.readln geht nicht
 
Hallo,
ich habe einen Chat programmiert, nur dass Empfangen von Nachrichten vom Server an den Client funktioniert nicht.
Ich hab das mit dem timer und dem connected ereignis versucht, aber das Programm reagiert dann nicht mehr. Ich hab hier im Forum auch ähnliche Probleme gesehen, aber keine konkreten Lösungen.
Ich connecte mit dem Chat am Anfang und disconnecte erst am Ende, dh. es besteht die ganze Zeit eine Verbindung.
MfG
Spurius

Meflin 13. Nov 2003 20:12

Re: client.readln geht nicht
 
Das musst du im onExecute Ereignis des servers machen
Delphi-Quellcode:
with AThread.Connection do begin
writeln('');
end;

Meflin 13. Nov 2003 20:14

Re: client.readln geht nicht
 
oder falls ich das jetzt falsch verstanden habe vom client aus:
Delphi-Quellcode:
with client do begin
message=readln();
end;

Spurius 13. Nov 2003 22:29

Re: client.readln geht nicht
 
das geht ja grade nicht, dass ich im timer zb. folgendes mache:
Delphi-Quellcode:
var post:string;
begin
post := client.readln;
end;
das prog friert dann ein :(

[edit=Sharky]Code-Tags korrigiert. Mfg, Sharky[/edit]

ATwardz 13. Nov 2003 22:53

Re: client.readln geht nicht
 
ANTIFREEZ von Indy könnte die Lösung sein!
Wie gross sind den die Daten die du versendest? Wenn sie gross sind friert er ohne Antifreez ein bis er fertig ist!

ATwardz

Spurius 14. Nov 2003 07:25

Re: client.readln geht nicht
 
Die größe der verschickten Detaien kann nicht das prob sein, das sind ja nut strings. ich denk eher, das prog friert ein weil nichts durch die leitung kommt. es muss doch irgendwie möglich sein, mit dem client auf eingehende nachtichten zu warten, ohne dass da prog einfriert?
MfG
Spurius

Meflin 14. Nov 2003 17:03

Re: client.readln geht nicht
 
es muss auch
Delphi-Quellcode:
with clinet do begin
post := readln
end;
heißen. Zumindest ist das die gängige schreibweise!

Spurius 14. Nov 2003 17:07

Re: client.readln geht nicht
 
damit gehts auch nicht :(
soll ich mal meinen ganzen quellcode posten?

scp 14. Nov 2003 17:24

Re: client.readln geht nicht
 
Wenn du Indy-Kompos benutzt, kannst du ein Timeout setzen:

Delphi-Quellcode:
  with clinet do begin
  post := ReadLn(#$0A, 250);
  end;
In dem Fall wartet er 250 ms, wenn in der Zeit nix kommt über gibt er wieder an die Anwendung und es friert nix ein.

Spurius 14. Nov 2003 17:59

Re: client.readln geht nicht
 
also, er friert nicht mehr ein !!! :) :) :)
aber der text wird irgendwie auch nciht empfangen!
Delphi-Quellcode:
unit modul;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Memo1: TMemo;
    connect: TButton;
    Button2: TButton;
    Edit1: TEdit;
    ip: TEdit;
    Port: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    client: TIdTCPClient;
    Timer1: TTimer;
    server: TIdTCPServer;
    TabSheet2: TTabSheet;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Memo2: TMemo;
    serverport: TEdit;
    servername: TEdit;
    Button4: TButton;
    Button5: TButton;
    Memo3: TMemo;
    Button3: TButton;
    Timer2: TTimer;
    procedure connectClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure serverConnect(AThread: TIdPeerThread);
    procedure serverExecute(AThread: TIdPeerThread);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Timer2Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.connectClick(Sender: TObject);
begin
 client.Port := strtoint(port.Text);
 client.Host := ip.Text;
 client.Connect;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

 client.Writeln(edit2.Text + ': ' + edit1.text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 memo1.Lines[0] := 'Chatprotokoll';
 memo2.lines[0] := 'Chatprotokoll';
 memo3.Lines[0] := 'Angemeldete Chatter';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var enab1,enab2:integer;
begin

 if port.text <> '' then enab1 := 1 else enab1 := 0;
 if ip.Text <> '' then enab2 := 1 else enab2 := 0;
 if (enab1 + enab2) = 2 then connect.Enabled := true else
  connect.Enabled := false;

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 server.DefaultPort := strtoint(serverport.Text);
 server.active := true;


end;

procedure TForm1.Button5Click(Sender: TObject);
begin
 server.Active := false;
end;

procedure TForm1.serverConnect(AThread: TIdPeerThread);
begin
 memo3.Lines.Add(athread.Connection.Socket.Binding.PeerIP)

end;

procedure TForm1.serverExecute(AThread: TIdPeerThread);
var post: string;
begin
  post := athread.connection.readln;
  memo2.Lines.Add(post);
  athread.Connection.WriteLn(post);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  server.Bindings.Free;
 client.Disconnect;
 server.Free;
 client.Free;
 server.destroy;
 client.Destroy;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var post:string;
begin
 with client do begin
 post := readln(#$0A, 250);
 memo1.lines.add(post);
 end;


end;

end.
weiss vielleicht einer warum nicht?

und was bedeuten die parameter?
with clinet do begin
post := ReadLn(#$0A, 250); // #$0A ???
end;

Das Intervall im timer ist 500

MfG
Spurius


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.
Seite 1 von 2  1 2      

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