PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : php goes telnet



atomD
20-06-2003, 17:56
Hi,

also ich versuche schon seit geraumer Zeit meinen mldonkey
über die telnet schnittstelle anzusprechen....
...irgnetwie klappt das auch also die grundlegen socket functionen
von php hab ich zusammen und ans laufen bekommen

ABER (großgeschrieben :-))

wenn ich vom socket lese will aller

while( strlen($out = socket_read($mysocket, 1024)) )
oder
while( true == ($out = socket_read($mysocket, 1024)) )

enden es immer in einer Endloschleife

hat jemand ein Tip für mich??


thx und gruss
atomd

quinte17
23-06-2003, 07:12
ist es wirklich eine endlosschleife, oder wartet er nur bis wirklich was zurückkomt?

kann ja sein *gg*

mfg

phate
23-06-2003, 13:30
Hi atomD,

wie quinte17 bereits erwähnt hat, wirds wohl eher daran liegen, dass Dein socket_read-Aufruf solange wartet, bis er tatsächlich Daten lesen kann. Sind nun alle Daten aus dem Socket gelesen, gibt socket_read nicht etwa einen Rückgabewert a la "Keine Daten mehr da" zurück, sondern wartet brav, bis wieder Daten zum Lesen anliegen, d.h. Dein Programm läuft nicht weiter.

Stichwort "Blocking I/O" bzw. "Non-Blocking I/O".

Schau Dir die Funktion socket_select() an. Mit der kannst Du überprüfen, ob Daten zum Lesen anliegen und nur dann Lesen. Liegen innerhalb eines zu wählenden Timeouts keine Daten an, kannst Du i.a.R. davon ausgehen, dass die Datenübertragung beendet ist.

http://de3.php.net/manual/de/function.socket-select.php

Andere Alternative ist, die Ausgabe des mldonkey zu parsen. Weisen Ausgaben eine definierte Endezeile oder ein Endezeichen auf, so kannst Du auch darüber das Einlesen beenden.

Gruss,

phate

atomD
06-07-2003, 11:19
das mit den Daten und dem Timeout hört sich schon gut an,
werde mir mal das socket_select angucken...

Immoment hack ich ein wenig an dem Gui Protokoll rum,
was der mldonkey auch anbietet, dort haben die Nachrichten
eine definierte Struktur "int Länge | content".

Was aber ein tiefes Graben im Gedächtnis zur folge hat:
"little endian integer codierung" parsen von 2 / 4 byte ints
und strings und listen :-)

Interesant aber primärziel sind erstmal die anstehenden Fachprüfungen :-)