Readln mit TcpClient... Bitte helft mir!

bashi

Grünschnabel
Hallo,

ich hab ein Problem, ich muß bis Mittwoch nen kleinen Chat zusammengebastelt haben, einen Client und einen Server.
Ich benutze TcpClient und TcpServer aus dem "Internet" Reiter von Delphi 7 mit Indy hab ich das auch schon versucht zu basteln, hab ich auch nicht hinbekommen.
Mein Server kann an den Client keine Strings schicken bzw. dieser nimmt sie nicht an. Andersrum (Client zu Server) funzt es.

mein Funktionierendes Bsp:
empfangen mit
Code:
procedure TForm1.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
begin
  while ClientSocket.Connected= True do begin
    MemoChat.Lines.Add(ClientSocket.Receiveln);
    if ClientSocket.Receiveln = '' then begin
      break;
    end
  end;
end;
das break hab ich gemacht, weil er mir ohne in einer endloschleife das Memo vollschreibt mit leerzeichen, sobald der Client beendet wird (kann auch nicht ganz ok sein).
Und gesendet wird mit
Code:
TcpClient1.Sendln(LineText);
Das haut ja alles schon mal hin.
aber andersrum klappt es einfach nicht, ich hab schon folgendes versucht:
Code:
procedure TForm1.BtnConnectClick(Sender: TObject);
begin
  TcpClient1.RemoteHost:= InputIP.Text;
  TcpClient1.RemotePort:= Port;
  TcpClient1.Open;
  while TcpClient1.Connected= True do begin
    TcpClient1.Receiveln;
  end;
end;
dabei kackt mir der client aber ab.
und zum senden:
Code:
TcpServer1.Sendln(LineText);
Der Client scheint den String garnicht zu empfangen, da ich versucht habe eine OnReceive Prozedur mit ner einfachen 'test' ausgabe zu erstellen, diese wird garnicht ausgeführt.
Bitte helft mir, ich komm einfach nicht weiter.
(übrigens hab ich nicht viel ahnung von Delphi *absoluteranfängerichbin*)

Vielen Dank schonmal im Voraus!
 

Patrick Kamin

Erfahrenes Mitglied
-

Deine ganzen while-Schleifen solltest du erstmal rausnehmen, die sollten alle in Endlosschleifen enden.

Da du, wie schon gesagt, noch nicht so viel Erfahrung mit Delphi hast, empfehle ich dir die ClientSocket und ClientServer Komponenten, die sind für einen einfachen Text-Chat besser geeignet.
 

bashi

Grünschnabel
Sind das auch Non-Visual Komponenten? und wo bekomm ich die her?
Oder weiß einer ein richtig einfaches Tut, mit dem ich das hinbekomme? ich hab schon dieses hier versucht, ich bekomm aber garnichts hin. Das Indy Beispiel, welches man sich von der Homepage laden kann, wird bei mir nicht mal vernünftig kompiliert.
 

digleu

Mitglied
Hm ich glaube bei Delphi7 sind die nicht mehr dabei ...

aber mal was anderes: ich habe das gleiche Problem mit dem Lesen bei der Indy Client Komponente. Es existiert kein OnReceive oder OnExecute Event. Wie soll ich dann bemerken, dass eine Server antwort gekommen ist? Soll ich vielleicht doch eine Endlosschleife (bzw. Schleife, die bis zum Disconnect läuft) bauen, die dann ständig ReadLn auf den Socket ausführt? Die müsste dann, denke ich, in einem seperaten Thread liegen. Stopt das ReadLn denn den Code bis auch wirklich etwas ausgelesen wurde? Hoffe, dass jemand antworten kann...

mfg Lars