Autor Beitrag
Real-TTX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 20.08.05 00:05 
Hallo,

Ich habe ein Problem ich schicke befehle an einen Server und bekomme für jeden befehl eine Antwort also so habe ich es ...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
TcpClient1.RemoteHost := 'localhost';
TcpClient1.RemotePort := '51234';
TcpClient1.Open; // Wenn die Connection Hergestellt ist bekommt man ein OK ...
TcpClient1.Sendln('checkport 1010'); // Bekommt man ein Status OK,1 oder Ok2 usw ... oder Error...
TcpClient1.Sendln('login name pass'); // OK oder Error...
TcpClient1.Sendln('get_players'); // Alle Players .... id nick ping ( zeile für Zeile....)


Nun Will ich für jedes die Antwort abfangen ... und in eine ListBox oder so was ... egal was ... Bei meinem Code Spackt das Programm ab da er die While die ich mache nicht beended wird .... es muesste so aussehen ... zum beispiel´

while response != OK {
response = Receive...
}

und mien jetziger Code :
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:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Sockets;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    TcpClient1: TTcpClient;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var
s: string;
procedure TForm1.Button1Click(Sender: TObject);
begin
TcpClient1.RemoteHost := 'localhost';
TcpClient1.RemotePort := '51234';
TcpClient1.Open; 
TcpClient1.Sendln('checkport 1010');
TcpClient1.Sendln('login name pass');
TcpClient1.Sendln('get_players');

s := TcpClient1.Receiveln;
while s <> '' do
begin
  ListBox1.Items.Add(s);
  s := TcpClient1.Receiveln;
end;

end;

end.


Ich muss die While beenden sobald ich ein OK oder Error bekomme ... ist schwer zu erklären darum hoffe ich einer versteht es... und noch ein problem gibt es in Perl eine art "Regular Expression" ??

mfg
Real-TTX

Moderiert von user profile iconmatze: Code- durch Delphi-Tags ersetzt.
Harry M.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: Sa 20.08.05 09:02 
:welcome: im DF

Für sowas nehme ich Ini-Dateien und übertrage die als Text (ggf. verschlüsseln) ;-)

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
Real-TTX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 20.08.05 10:02 
:party: Danke,

Ini Übertragen .. ? Mit dem Server mit dem ich mich Verbinde ist nicht Open Source oder so was .. :) Ich muss es so machen via TCP mir die ganzen Infos Saugen :)

mfg
Real-TTX
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 20.08.05 14:38 
Moin!

Du hat einen etwas "ungeordneten" Schreibstil... :gruebel: :wink:

Spricht was dagegen TClientSocket zu nehmen und dann mit den Ereignissen zu arbeiten? Das dürfte in deinem "Stadium" evtl. etwas einfacher sein, oder? :wink:

user profile iconReal-TTX hat folgendes geschrieben:
gibt es in Perl eine art "Regular Expression" ?

Klar gibt´s sowas in Perl, aber was nutzt das? :lol: Also wir sind hier schon in einem Delphi-Forum und programmieren hier in der Regel in Delphi... :wink:

Aber um deine "versteckte" Frage zu beantworten: Nein, Delphi kennt nativ keine regulären Ausdrücke, es gibt aber haufenweise Komponenten dazu.

cu
Narses
Real-TTX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 20.08.05 16:10 
Sorry ich meinte nicht in Perl sondern Wie in Perl .. :=) , Ich bin wohl ein alter Perl-Guru :P Und
Zitat:

Du hat einen etwas "ungeordneten" Schreibstil


Das kann sein.. :P

Auser dem du hast eine etwas komische art dich aus zu drücken :D ...

Naja auserdem verwende ich doch dies oder ?Bzw wie sieht es nun aus die While abzubrechen sobald ein OK kommt und
...

Wie sieht es aus mit Reg-Exp in Dephi ? Bzw Welches Modul oder Komponenten Brauch ich dazu `? Url oder Name?

mfg
Matthias
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 20.08.05 16:13 
user profile iconReal-TTX hat folgendes geschrieben:
Wie sieht es aus mit Reg-Exp in Dephi ? Bzw Welches Modul oder Komponenten Brauch ich dazu `? Url oder Name?


Direktlink? Hier: www.delphi-forum.de/search.php

AXMD
Real-TTX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 20.08.05 17:29 
Habe ich gesucht und Ich finde nicht das passende :D sorry , Dennoch Ist mein Haubtproblem das Abfragen vom Server ueber die Tcp - Verbindung.. mfg
Real-TTX
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 20.08.05 23:16 
Moin!

user profile iconReal-TTX hat folgendes geschrieben:
Dennoch Ist mein Haubtproblem das Abfragen vom Server ueber die Tcp - Verbindung

user profile iconNarses hat folgendes geschrieben:
Spricht was dagegen TClientSocket zu nehmen und dann mit den Ereignissen zu arbeiten? Das dürfte in deinem "Stadium" evtl. etwas einfacher sein, oder? :wink:

Nun?

cu
Narses
Real-TTX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 21.08.05 09:45 
Hmmm...

Ich habe den TClientSocket nicht , Ich habe zwar Delphi7 Aber in meinem Source Folder ist kein Ordner names Vcl ... Ich habe in dem Source Folder nur einen Ordner un der heist "WebMidas" Hmm .. Was ist an "TcpClient" So verkehrt ?
Wo ist das Problem bei dem Auslesen ? Die While soll solange gemacht werden solange die antwort-zeile nicht OK ist ... oder gibts da prob ? :)

mfg
Real-TTX
Real-TTX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 21.08.05 10:18 
Hi,

Ich habe es nun hinbekommen mit Indy TcpClient oder so .. ! Nun muss ich "nur" noch die While hinbekommen...

Solange Abfragen Solange die Antwort nicht OK ist...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
While Not answer = 'OK' do begin
  listbox1.Items.Add(answer);
  answer := IdTCPClient1.ReadLn; 
end;


So Hätte ich es gernde solange Abfragen solange Daten vom Server kommen und bei einem error (am besten match bzw pattern) oder bei einem OK Abbrechen...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
While (answer := IdTCPClient1.ReadLn) do begin
  listbox1.Items.Add(answer);
  if answer = 'error' then Close;
  if answer = 'OK' then break;
end;


Gibt es so oder so Ähnlich eine Möglichkeit?


Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconKlabautermann: Normaltext aus Delphi-Tag befreit ;).
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 21.08.05 12:51 
Moin!

Probier das mal so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var
  Response: String;
  ExitLoop: Boolean;

begin
  ExitLoop := FALSE;
  repeat
    Response := IdTCPClient1.ReadLn;
    if (Response = 'OK'then begin
      // Dinge tun
      ExitLoop := TRUE;
    end
    else if (Response = 'Hubba'then begin
      // Dinge tun
    end
    else begin
      // ganz andere Dinge tun
    end;
  until (IdTCPClient1.ReadLnTimedOut or ExitLoop);

Aber, ganz ehrlich (auch wenn du der Perl-Gott bist), ein Delphi-Grundlagen-Tut und etwas Informatik würden dir sicher nicht schaden... :roll: :wink:

cu
Narses
Real-TTX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Do 25.08.05 22:23 
Danke, hat mir geholfen...

mfg
Real-TTX