Einzelnen Beitrag anzeigen

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, 02: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