Autor Beitrag
gitta
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Sa 17.06.06 12:00 
Hallo Zusammen,

Ich verwende Delphi5, Indy9 und die Komponente IdTCPClient.

Der Client logt sich auf einen TCP-Server ein, und
bekommt permanent irgend welche Textzeilen übertragen.
Jede eingehende Zeile soll in eine TStringList geschrieben werden.
Das macht er so lange bis der Client die Verbindung trennt.
Das ist die komplette Anforderung.

Ich habe leider keine Erfahrung mit TCP und threads.
Könnt Ihr mir bitte helfen das IdTCPClient.ReadLn
in ein thread zu packen welcher permanent aus dem socket liest.
Oder kennt Ihr ein Tutorial wo ich das abschauen könnte.

Gruß Gitta.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure btnConnectClick(Sender: TObject);
var
  LString, RString : String;
begin
  with IdTCPClient do
  begin
    Host := edtHost.Text;
    Port := StrToint(edtPort.Text);
    try
      Connect;

      RString := IdTCPClient.ReadLn; // blockiert die Anwendung bis der Server etwas sendet
      lbCommunication.Items.Insert(0,'Server said -> ' + RString);

    except
    on E : Exception do
      begin
        ShowMessage(E.Message);
      end;
    end;
  end;
end;
gitta Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Sa 17.06.06 14:04 
Hallo Zusammen,

hab hier im Form ein Beitrag gefunden den ich verwenden konnte.
Es funkt einwandfrei.

www.delphi-forum.de/...t=idtcpclient+thread

Schöne Gruße Gitta
gitta Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Sa 17.06.06 18:35 
Hallo Zusammen,

hab doch noch ein Problem.
Wenn die connection zum Server aufgebaut ist, sende ich ein Commando zu Server,
und bekomme auch permanent meine Antworten, so wie es gerne hätte.
Das Problem ist, sobald der Thread für das ReadLn gestartet ist, kann ich
kein weiteres Kommando zum Server senden. Auch dann nicht,
wenn der Server gerade nichts sendet.

Irgend eine Idee was ich machen müsste um weiterhin senden zu können?

Gruß Gitta


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
procedure TfrTCPIntercom.IdTCPClientConnected(Sender: TObject);
var
    LString : String;
begin
  Thread := TReadThread.Create(True);
  Thread.FreeOnTerminate := True;

  IdentifyToServer;
  Anzeigen('* Verbindung zum Server hergestellt');
end;


{------------------------------}
{}procedure TReadThread.Execute;
{------------------------------}
begin
  try
    While (not Terminated) and (frTCPIntercom.IdTCPClient.Connected) do
    Begin
      Nachricht := frTCPIntercom.IdTCPClient.ReadLn();
      Synchronize(EingangVerarbeiten);
    End;
  except
    on e: exception do
    begin
      if frTCPIntercom.IdTCPClient.Connected
      then frTCPIntercom.IdTCPClient.Disconnect;
      frTCPIntercom.Anzeigen('* Der Read Thread hatte irgendein Problem '+e.Message);
    end;
  end;
end;
gitta Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Sa 17.06.06 20:43 
sorry, natürlich kann ich weiterhin senden. Das Problem war
wieder einmal von dem Monitor.

Gruß Gitta