Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Rcon - Antwort (https://www.delphipraxis.net/103974-rcon-antwort.html)

schmitzlipp 25. Nov 2007 15:26


Rcon - Antwort
 
Hi,
ich hab mich schon ne Weile zu meinem Problem hier umgesehen, jedoch ohne Erfolg.

Ich will mit meinem Programm Befehle an einen Spiele-Server per Rcon schicken und die Antworten des Servers dann mit meinem Programm auswerten. Ich schicke dabei die Befehle mit der IndyUdpClient-Komponente und empfange die Antworten ebenfalls damit:
Delphi-Quellcode:
...
var Part: string;
...
Form1.IdUDPClient1.Send(('ÿÿÿÿrcon ' + password + ' ' + command));
...
Part := Form1.IdUDPClient1.ReceiveString();
...
Das Problem besteht darin, dass die komplette Antwort aus einem einzigen String besteht, dessen Zeilen durch Leerzeilen (ich glaube 'chr(13)') getrennt sind und ich die Antwort nur zeilenweise verarbeiten kann. Ich weis nur nicht wie ich den String zerteilen soll. Mit der Delimiter-Funktion und der Explode-Funktion aus der Code-Library hatte ich keinen Erfolg, da die erstere auch bei Leerzeichen trennt und die andere den gesamten String in den Array-Index 0 gepackt hat.
Wäre echt geil, wenn jemand eine konstruktive Idee liefern würde.

HalloDu 25. Nov 2007 15:32

Re: Rcon - Antwort
 
Könntest du uns dann vielleicht einen solchen String geben, damit wir sehen können, wie der denn aussieht. Bei undruckbaren Zeichen, könntest du dann auch vielleicht den ASCII Code angeben.

Vielleicht können wir dir dann helfen, weil wir die Kristallkugel schon vor einiger Zeit kaputt gemacht haben.

schmitzlipp 25. Nov 2007 15:47

Re: Rcon - Antwort
 
-PLAYER INFORMATION
slot: 1
team: ALLIES
name changes: 0
-USER INFORMATION
name: [BOT]Vic
level: 0 (No0b)
GUID: omnibot0100000000000000000000000 (USERID: 00000000)
IP: localhost
MAC:
timestamp: 11/25/07 15:33:40
greet-text: none
greet-audio: none
private-ACL: none

Mit dem ASCII-Code bin ich mir eben nicht sicher. Ich weis nicht genau, ob die Leerzeilen dem ASCII-Code 13 entsprechen.
Wenn ich mir Part mit showmessage ansehe, wird es wie oben abgebildet.

dominikkv 25. Nov 2007 16:18

Re: Rcon - Antwort
 
eine StringList mit delimitter müsste gehen...

schau mal was hier rauskommt:
Delphi-Quellcode:
var
  List: TStringList;
  Antwort: String;
begin
  List := TStringList.Create;
  Antwort := 'Hallo'#13'das'#13'ist'#13'ein'#13'Test';
  List.DelimitedText := Antwort;
  showmessage(List[0]);
  FreeAndNil(List);
end;
Da wo 'Hallo'#13... steht kommt dein empfangener String hin.

Und wenn das immernochnicht funktioniert denn setze auf die Zeile DelimitedText := Antwort einen Breakpoint, wenn er dann dort anhält drückst du STRG + F7 und gibst bei Ausdruck: Antwort ein und drückst Enter und diesen String postest du mal hier.

Apollonius 25. Nov 2007 16:23

Re: Rcon - Antwort
 
Wir hatten vor einiger Zeit schon mal ein Thema über TStrings.Delimiter. In neuen Delphi-Versionen gibt es die Eigenschaft StrictDelimiter, wenn du die auf true setzt, sollte die Trennung funktionieren.

schmitzlipp 25. Nov 2007 16:29

Re: Rcon - Antwort
 
ich glaube dei deinem Vorschlag fehlt noch die Festlegung nach welchem Zeichen der Delimiter trennen soll.
Außerdem wird mein String jetzt auch bei Leerzeichen getrennt. Er soll aber nach Zeilenumbrüchen (hab vorhin fälschlicherweise Leerzeilen geschrieben) trennen.

Ab welcher Version geht das mit strictdelimiter und wie genau lege ich das fest? Einfach strictdelimiter := true?

Ok Frage schon beantwortet: Erst ab Delphi 2006 und ich benutz die 2005!
Gibts da irgendwie ne andere möglichkeit?

dominikkv 25. Nov 2007 16:43

Re: Rcon - Antwort
 
es würde so gehen:
Delphi-Quellcode:
var
  List: TStringList;
  Antwort: String;
begin
  List := TStringList.Create;
  Antwort := 'Hallo das ist'#13'ein'#13'Test';
  List.Delimiter := #13;
  List.StrictDelimiter := True;
  List.DelimitedText := Antwort;
  showmessage(List[0]);
  FreeAndNil(List);
end;
ansonsten versuch mal das:
Delphi-Quellcode:
var
  List: TStringList;
  Antwort: String;
begin
  List := TStringList.Create;
  Antwort := 'Hallo das ist'#13'ein'#13'Test';
  List.Text := Antwort;
  showmessage(List[0]);
  FreeAndNil(List);
end;
edit: [ quote]-Tag mit [ delphi]-Tag vertauscht...

schmitzlipp 25. Nov 2007 16:48

Re: Rcon - Antwort
 
Also die obere Methode geht nich, weil ich die Property StrictDelimiter nicht verwenden kann
und bei der unteren Möglichkeit wird auch nach Leerzeichen getrennt, also Wort für Wort. Ich brauche aber Zeile für Zeile.

Stimmt nich: Nach der Zeiten Method kommt eine Exeption. Was soll der denn bei List.Text := Antwort; machen?

dominikkv 25. Nov 2007 16:53

Re: Rcon - Antwort
 
Zitat:

Zitat von schmitzlipp
Also die obere Methode geht nich, weil ich die Property StrictDelimiter nicht verwenden kann
und bei der unteren Möglichkeit wird auch nach Leerzeichen getrennt, also Wort für Wort. Ich brauche aber Zeile für Zeile.

Bei mir gehts -.-
Sicher das du auch List.Text eingegeben hast und nicht List.DelimitedText?
Ansonsten kannst du mit Hier im Forum suchencopy arbeiten oder die Leerzeichen ersetzen und dann mit DelimitedText...

schmitzlipp 25. Nov 2007 16:57

Re: Rcon - Antwort
 
Der stürzt mit dieser Meldung ab:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt etadwin1.exe ist eine Exception der Klasse EStringListError mit der Meldung 'Listenindex überschreitet das Maximum (2)' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Ich weis nicht, was der mit MAximum will. Ich hab doch nirgendwo ein Maximum festgelegt.

Fuck, bin ich blöd!! :wall:
Das Maximum bezog sich auf meine Abfrage: showmessage(InputList[2]);
Es gab aber nur eine Zeile, darum kam die Exeption. Jedenfalls funzt dein Lösungsansatz bestens. Hätt nicht gedacht, dass das so einfach geht.
Thx an alle, die mir geholfen haben und besonders an dominikkv!!!!!!!!!!!!!!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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