AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TCP PHP und nu auch noch Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

TCP PHP und nu auch noch Delphi

Ein Thema von Corelgott · begonnen am 12. Jul 2005 · letzter Beitrag vom 20. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#1

TCP PHP und nu auch noch Delphi

  Alt 12. Jul 2005, 01:48
Hi @ all,

ich bin mal wieder zu dumm....
Irgendwie habe ich weder beim googlen noch beim suchen hier was gefunden, was mich auf ne vernünftige idee bringt...

Es geht um folgendes...

Ich will nen teamspeak server abfragen... (d.h. channels, user, usw)

Mir ist klar, dass ich das so ohne ne vorlage vergessen kann... deswegen:
http://wolfmap.gameprophets.com/teamspeak/display.php

Das php-script habe ich auch als "quelltext"...

Der macht das eigentlich recht simpel:

PHP-Code:
Code:
function _openConnection(&$socket, $host, $port, $timeout) {
   echo $host;
   $socket = fsockopen($host, $port, $errno, $errstr, $timeout);
   $res   = fgets($socket, 4096);
   echo $res;
   if ($socket and ($this->_stripEOL($res) == "[TS]")) {
      return true;
   } else {
      return false;
   }
}
Das prob ist bloß:

1.

PHP benutzt den Socket als file-stream. Somit passt das auch mit fgets
-> Wie realisiert man das bitte unter Delphi? Weil bei den read-events kommt nix.. rein gar nix zurück...
Vor allem gibt es bei dem Bsp. oben keinen "Grund" warum der Server etwas an daten liefert sollte... (Abgesehen von der ftgets-Aufforderung... sowieso interressant, das der ts Server bei "keinem" Befehl nur so mal eben "[TS]" sendet)

2.

PHP-CODE:
Code:
function _getServerInfo($socket) {
   fputs($socket, "si\n");
   $result = array();
   do {
      $buffer = $this->_stripEOL(fgets($socket, 4096));
      if (($buffer != "OK") && (strtoupper(substr($buffer, 0, 5)) != "ERROR")) {
         $pos = strpos($buffer, '=');
         if ($pos !== False) {
            $result[substr($buffer, 0, $pos)] = substr($buffer, $pos + 1);
         }
      }
   } while (($buffer != "OK") && (strtoupper(substr($buffer, 0, 5)) != "ERROR") && (!feof($socket)));
   return $result;
}
Wenn ich depp das richtig lese schickt das Fieh an den socket "si" & LineBreak. Darauf hin pustet der Server seine infos raus, bis entweder "ERROR" oder "OK" oder EOF kommt...

Aber egal wie oder was ich über meine Socket Conn-Puste... im onRead des Sokets kommt nix an... gar nix...

Irgendwie habe ich jetzt nicht mehr so richtig den Plan...
Ich bin auch ned soo bewandert in socket-programmierung...

Kann mir da mal vielleicht jemand nen Tipp geben wonach ich google könnte?
Bzw. hätte da wer ne Page für mich?
(Auch was generelles über diese art Technik zur Serversteuerung... nicht zwingend ts, wäre aber nett ^^)

Oder ist das ganze gar kein normales TCP sondern UDP? (Laut php-man müsste das eigentlich TCP sein, das udp als protokoll expizit angegeben werden müsste, was nicht gemacht wird im script!)

THX fürs nachdenken!
cya Corelgott
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: TCP PHP und nu auch noch Delphi

  Alt 12. Jul 2005, 05:47
So, nach einer Weile "rumspielen" hab ich es raus: es ist eine TCP-Verbindung. ABER: Sie geht nicht an den Standard-Port 8767 (denn das ist wirklich udp) sondern an den Port 51234 (Standard) ... Das ist eine offizieller Query-Port vom TS-Server. Wenn du da connectest, antwortet der Server dir mit "[TS]" .. naja .. und den Rest bekommst du selber hin.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
WIN-MANww

Registriert seit: 23. Mai 2004
Ort: Schweiz
55 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: TCP PHP und nu auch noch Delphi

  Alt 13. Aug 2005, 22:16
Zitat:
Wenn du da connectest, antwortet der Server dir mit "[TS]" .. naja .. und den Rest bekommst du selber hin.
Und genau damit habe ich Probleme, wenn ich nachdem ich mich über IdTelnet mit dem Teamspeak Server verbunden habe ein Kommando an den Teamspeak Server sende wie Server auswählen was ja über sel Serverport geht, also z.B.: sel 8767. Ich realisiere das in Delphi so:
Delphi-Quellcode:
command := Edit1.Text;
IdTelnet1.SendCmd(command);
Nur wenn ich das mache und in Edit1 sel 8767 schreibe krieg ich einen Error: Reply is not valid: OK. Aber OK ist ja nach meiner Meinung gültig, nur wie kann ich das dem IdTelnet mitteilen? Oder wie kann ich einfach einen Befehl per IdTelnet senden und dann die Antwort in einer Memo anzeigen?

Fg:
WIN-MAN
Fg:
WIN-MAN

"Never underestimate Radical Vision" - Startup
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: TCP PHP und nu auch noch Delphi

  Alt 13. Aug 2005, 22:36
hmmm also ich löse das eintlich ganz erinfach über nen simplen socket...

ich leech mal meine "ts-unit" bei... vielleicht hilft das ja...
Also mittlerweile geht das fieh eingentlich recht gut...

cya Corelgott
Angehängte Dateien
Dateityp: exe project1_107.exe (535,5 KB, 23x aufgerufen)
Dateityp: pas tsinfo_995.pas (8,0 KB, 19x aufgerufen)
  Mit Zitat antworten Zitat
WIN-MANww

Registriert seit: 23. Mai 2004
Ort: Schweiz
55 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: TCP PHP und nu auch noch Delphi

  Alt 13. Aug 2005, 22:54
Ok, dein Code sieht ziemlich interessant aus, jedoch kann ich ihn erstens nicht kompilieren weil mir die Unit untGlobal fehlt und Zweitens frage ich mich ob das vieleicht auch ganz einfach mit Indy möglich wäre.

Fg:
WIN-MAN
Fg:
WIN-MAN

"Never underestimate Radical Vision" - Startup
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: TCP PHP und nu auch noch Delphi

  Alt 13. Aug 2005, 23:11
also @ compilieren.. is klar, da ja mein projekt nicht nur aus der einen unit besteht.. aber eigentlich sollten das nur die funtionen split bzw. debug sein die dir fehlen..

aber an sich geht es hier um das prinzip... bei ts ist es an sich recht einfach daten zu schicken und daten zu bekommen...
alles ganz klar und sauber... nach ablaufplan ^^

sonst schau halt mal nach teamspeak-display... ist ein php-script, dass einem nen ts server auf ner webpage anzeigt..
daher habe ich meine "ganzen" infos über ts....

eingelich ist es recht simpel:

auf dem standart port 51234 regelt der den ganzen kram wie alle server auflisten... man bekommt dann namen & ports
dann wählt man mit sel den server aus.... und kann dann die userliste usw erfragen....

wenn der nen fehler rausschleißt kommt eigentlich nur "ERROR" zurück... vielleicht kann das deine Kompo nicht so ganz ab? (muss auch gestehen, dass ich mit der noch nie was gemacht habe..)


cya
Corelgott
  Mit Zitat antworten Zitat
WIN-MANww

Registriert seit: 23. Mai 2004
Ort: Schweiz
55 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: TCP PHP und nu auch noch Delphi

  Alt 14. Aug 2005, 16:38
Hi, ich bins nochmal

Das Verbinden hab ich nun hingekriegt, nur wie sende ich nun ein Kommando an den Server und kann dann die Reply in einer Memo ausgeben? Das ganze soll eine Art Shell geben mit welcher ich einen Befehl wie dbuserlist senden kann und in der Memo1 dann die Reply angezeigt bekomme. Mein Code:

Mit dem Teamspeak Server verbinden:
Delphi-Quellcode:
var
 selserver: String;
 loginstring: String;
begin
 loginstring := 'login '+username_edit.Text+' '+password_edit.Text;
 selserver := 'sel '+port_edit.Text;
 sock := TClientSocket.Create(nil);
 sock.Host := host_edit.Text;
 sock.Port := Strtoint(port_edit.Text);
 try sock.Open;
 except Showmessage('Verbindung fehlgeschlagen'); end;
 sock.Socket.SendText(selserver);
 Memo1.Lines.Add(sock.Socket.ReceiveText);
 sock.Socket.SendText(loginstring);
 Memo1.Lines.Add(sock.Socket.ReceiveText);
Ein Kommande senden:
Delphi-Quellcode:
var
 command: String;
begin
 command := Edit1.Text;
 sock.Socket.SendText(command);
 Memo1.Lines.Add(sock.Socket.ReceiveText);
Wenn ich nun ein Kommando eingebe, egal welches, dann Steht in der Memo1 [TS] was ja beim connecten auf einen Teamspeak Telnet Server immer am Anfang steht, aber das OK für ein Kommando wie sel 8767 bekomme ich nicht und auch kein ERROR.
Fg:
WIN-MAN

"Never underestimate Radical Vision" - Startup
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: TCP PHP und nu auch noch Delphi

  Alt 14. Aug 2005, 19:20
Zitat von WIN-MANww:
Delphi-Quellcode:
var
 command: String;
begin
 command := Edit1.Text;
 sock.Socket.SendText(command);
 Memo1.Lines.Add(sock.Socket.ReceiveText);
Wenn ich nun ein Kommando eingebe, egal welches, dann Steht in der Memo1 [TS] was ja beim connecten auf einen Teamspeak Telnet Server immer am Anfang steht, aber das OK für ein Kommando wie sel 8767 bekomme ich nicht und auch kein ERROR.
ist ja recht klar...

also du schickst dem server ein kommando:

sock.Socket.SendText(command); aber verlangst dann sofort, dass er eine antwort für dich parat hat... aber der braucht erst mal ein paar millisecs um was zurück zu schicken...
macht aber nix, da ein socket ein onRead-Event hat.. ein event dass dann auftritt, wenn er daten wieder bekommt... versuch mal so watt...

Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add(sock.Socket.ReceiveText);
end;
das event macht dir delphi automatisch wenn du es im oi doppelt anklickst...
falls du das ned willst / weisst oder was auch immer kannst du das auch zur runtime binden:

Delphi-Quellcode:
procedure read(Sender : TObject; Socket : TCustomWinSocket);
begin
  Memo1.Lines.Add(sock.Socket.ReceiveText);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ClientSocket1.OnRead := read;
end;
hoffe das hilf ein wenig ^^

cya
Corelgott
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#9

Re: TCP PHP und nu auch noch Delphi

  Alt 14. Aug 2005, 20:44
Delphi-Quellcode:
procedure read(Sender : TObject; Socket : TCustomWinSocket);
begin
  Memo1.Lines.Add({sock.}Socket.ReceiveText); //sock. braucht man nicht, man mekommt den Socket als Parameter übergeben ;)
end;
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: TCP PHP und nu auch noch Delphi

  Alt 14. Aug 2005, 20:58
woop sry den hatte ich voll übersehen ^^
aber hast recht!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 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