AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi client.readln geht nicht
Thema durchsuchen
Ansicht
Themen-Optionen

client.readln geht nicht

Offene Frage von "Spurius"
Ein Thema von Spurius · begonnen am 13. Nov 2003 · letzter Beitrag vom 15. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#1

client.readln geht nicht

  Alt 13. Nov 2003, 17:54
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
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: client.readln geht nicht

  Alt 13. Nov 2003, 20:12
Das musst du im onExecute Ereignis des servers machen
Delphi-Quellcode:
with AThread.Connection do begin
writeln('');
end;
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#3

Re: client.readln geht nicht

  Alt 13. Nov 2003, 20:14
oder falls ich das jetzt falsch verstanden habe vom client aus:
Delphi-Quellcode:
with client do begin
message=readln();
end;
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#4

Re: client.readln geht nicht

  Alt 13. Nov 2003, 22:29
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]
  Mit Zitat antworten Zitat
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#5

Re: client.readln geht nicht

  Alt 13. Nov 2003, 22:53
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
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#6

Re: client.readln geht nicht

  Alt 14. Nov 2003, 07:25
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
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#7

Re: client.readln geht nicht

  Alt 14. Nov 2003, 17:03
es muss auch
Delphi-Quellcode:
with clinet do begin
post := readln
end;
heißen. Zumindest ist das die gängige schreibweise!
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#8

Re: client.readln geht nicht

  Alt 14. Nov 2003, 17:07
damit gehts auch nicht
soll ich mal meinen ganzen quellcode posten?
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#9

Re: client.readln geht nicht

  Alt 14. Nov 2003, 17:24
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.
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#10

Re: client.readln geht nicht

  Alt 14. Nov 2003, 17:59
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:48 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