Entwickler-Ecke
Internet / Netzwerk - TcpClient Receive Probleme
Real-TTX - Sa 20.08.05 00:05
Titel: TcpClient Receive Probleme
Hallo,
Ich habe ein Problem ich schicke befehle an einen Server und bekomme für jeden befehl eine Antwort also so habe ich es ...
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| TcpClient1.RemoteHost := 'localhost'; TcpClient1.RemotePort := '51234'; TcpClient1.Open; TcpClient1.Sendln('checkport 1010'); TcpClient1.Sendln('login name pass'); TcpClient1.Sendln('get_players'); |
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 :
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 public 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
matze: Code- durch Delphi-Tags ersetzt.
Harry M. - Sa 20.08.05 09:02
:welcome: im DF
Für sowas nehme ich Ini-Dateien und übertrage die als Text (ggf. verschlüsseln) ;-)
Real-TTX - 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 - 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:
Real-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 - 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 - Sa 20.08.05 16:13
Real-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:
http://www.delphi-forum.de/search.php
AXMD
Real-TTX - 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 - Sa 20.08.05 23:16
Moin!
Real-TTX hat folgendes geschrieben: |
| Dennoch Ist mein Haubtproblem das Abfragen vom Server ueber die Tcp - Verbindung |
Narses 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 - 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 - 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...
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...
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
AXMD: Code- durch Delphi-Tags ersetzt.
Moderiert von
Klabautermann: Normaltext aus Delphi-Tag befreit ;).
Narses - So 21.08.05 12:51
Moin!
Probier das mal so:
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 ExitLoop := TRUE; end else if (Response = 'Hubba') then begin end else begin 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 - Do 25.08.05 22:23
Danke, hat mir geholfen...
mfg
Real-TTX
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!