fclose()

Katzenbauer

Erfahrenes Mitglied
Hallo,

ich schreibe gerade eine Libary, die es ermöglicht via des ICQ Protokolls auf den ICQ Server mit Benutzername und Kennwort zu connecten und von dort aus Messages zu schreiben. Also nicht mittels dieses Mail Systems sondern direkt ne Tcp Verbindung zum ICQ Server.

Ich bin mittlerweile soweit, dass ich ein korrektes Flap-Packet (so nennt sich das low Level Packet vom icq Protokoll) zum Auth Server schicke und dann, wenn alle Daten stimmen die Adresse vom Hauptserver + Auth Cookie in einem Flap Packet zurück bekomme. Soweit so gut. Nun zu meinem Problem.

Wenn ich mittels fsocketopen() auf den Server connecte sendet der Client (also mein Webserver) direkt nachdem das Script abgelaufen ist einen Verbindungsabbau und das noch bevor ich das entscheidende Packet mit dem Auth Cookie bekomme. Da hab ich mir gedacht nehm ich doch einfach mal pfsocketopen(). Leider bleibt er dann die ganze Zeit verbunden, sodass ich ohne den Webserver runterzufahren keine neue Verbindung aufbauen bzw. ein neues Packet senden kann, falls man sich beim Passwort vertippt hat, obwohl die Gegenseide schon längst einen Verbindungsabbau gesendet hat. Ein bissl buggy bei php das ganze denk ich mal. Der braucht jedes mal sein fclose(), obwohl der trotzdem dadurch kein Packet raussendet. Der braucht das irgendwie intern.

Hab das bisher mal ganz dirty mit sleep(1); vor dem fclose() abgedichtet. Optimal wäre eine Möglichkeit die das fclose() ausführt, wenn ich von der Gegenseite ein Packet zum Verbindungsabbau bekomme. Sowas gibt es bestimmt. Helft mir bitte :)
 
ich würde vieleicht ne if in ner while nehmen

PHP:
while(noch keine antwort)  
{    /* freu dich und mach mal nix*/  }  
fclose($fp);
das ist zwar nicht unbedingt multiuser fähig (da das den server n bissl belastet), aber funktioniert...
 
Dass das mit einer while geht habe ich mir schon gedacht. Nur wie stelle ich jetzt fest, dass es noch keine Antwort gibt?

Ich denke es muss etwas mit fgets() sein. Und damit muss ich dann das Verbindungsabbau-Packet anhand der Struktur entlarven (solte einfach sein).

Ich weiß nur nicht was der mit dem fgets in der Schleife anstellt. Ob der sich die ganze Zeit nur auf ein Packet, dass er genau in dem Moment empfangen hat bezieht oder alle durchgeht. Ich hab sowas noch nie gemacht:)

Ich kümmer mich besser drum, wenn ich ausgeschlafen bin *gähn*
 
Ich kann zwar nichts zur Problemloesung beitragen, moechte aber trotzdem mal etwas Senf loswerden.

Ich find's echt gut, dass Du Dich an die komplexe ICQ-Kommunikation heranwagst. Ich bin gespannt wann das ganze fertig ist. Bin auf jeden Fall interessiert mir das mal anzusehen.
Und schreib das ganze doch als Klasse. Ich hab vor Kurzem FTP und HTTP als Klassen implementiert, auch ueber fsockopen().
 

Neue Beiträge

Zurück