![]() |
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 |
Re: client.readln geht nicht
Das musst du im onExecute Ereignis des servers machen
Delphi-Quellcode:
with AThread.Connection do begin
writeln(''); end; |
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; |
Re: client.readln geht nicht
das geht ja grade nicht, dass ich im timer zb. folgendes mache:
Delphi-Quellcode:
das prog friert dann ein :(
var post:string;
begin post := client.readln; end; [edit=Sharky]Code-Tags korrigiert. Mfg, Sharky[/edit] |
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 |
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 |
Re: client.readln geht nicht
es muss auch
Delphi-Quellcode:
heißen. Zumindest ist das die gängige schreibweise!
with clinet do begin
post := readln end; |
Re: client.readln geht nicht
damit gehts auch nicht :(
soll ich mal meinen ganzen quellcode posten? |
Re: client.readln geht nicht
Wenn du Indy-Kompos benutzt, kannst du ein Timeout setzen:
Delphi-Quellcode:
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.
with clinet do begin
post := ReadLn(#$0A, 250); end; |
Re: client.readln geht nicht
also, er friert nicht mehr ein !!! :) :) :)
aber der text wird irgendwie auch nciht empfangen!
Delphi-Quellcode:
weiss vielleicht einer warum nicht?
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. 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. |
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