Hi Estar,
ich habe exat 1 zu 1 das selbe Problem.
Nur ich kann mehr zu Fehleranalyse sagen
http://phpforum.de/forum/showthread....64#post1502964
Abend.
Ich habe mir ein Skript geschrieben (Anhang icq_neu.php), welches ICQ-Nachrichten senden/empfangen soll.
Es basiert auf der Class WebICQLite (Anhang).
Um das Skript mal ein wenig aufzuklären: Das Skript holt sich die Nachrichten beim versenden aus einer Mysql-DB und beim empfangen schreibt es die Nachrichten in eine Mysql-DB. Alles, was im Skript ausgegeben wird, dient mir nur zur Fehleranalyse.
Ich kann ICQ-Nachrichten erfolgreich empfangen, dabei werden die Nachrichten auch wie gewollt in die Datenbank geschrieben. Das Problem dreht sich um das versenden von Nachrichten. Es funktioniert an und für sich, aber nur, sobald ich auch eine Nachricht empfange. Ich weis nicht, warum.
Vielleicht hatte ja jemand schonmal mit der Class zu tun und kann sich das ja mal jemand ansehen?
PS: ICQ-Nummer + Passwörter sind extra herausgenommen worden.
Mit freundlichen Grüßen,
Erstar
Geändert von Erstar (08.04.2012 um 15:48 Uhr)
-.-
Hi Estar,
ich habe exat 1 zu 1 das selbe Problem.
Nur ich kann mehr zu Fehleranalyse sagen
http://phpforum.de/forum/showthread....64#post1502964
Also wir sind jetzt so weit, dass das Problem bei einer Funktion in der Klasse liegt. Diese Funktion blockiert die Schleife, bis eine Nachricht empfangen wird, darum kann die Schleife nicht von vorne laufen und aus dem Grund keine Nachrichten versenden.
Nun müssen wir also die Funktion irgendwie zeitlich begrenzen.
Beim googlen ist rausgekommen, dass das mit PHP nicht funktioniert.
Weis jemand eine Lösung für das Problem?
// Edit:
Jemand zwitscherte mir, dass ich den blockierenden Socket in einen nicht blockierenden Socket umändern soll. Davon verstehe ich leider überhaupt nichts und auch beim herumprobieren mir socket_set_nonblock() etc. ist nichts positives herausgekommen.
Ich hab jetzt eine mehr schlecht als rechte Lösung gefunden.
Ist nur improvisativ, aber fürs Erste isses ausreichend.
-> Ich hab einfach einen zweiten ICQ-Bot mit einer anderen ICQ-Nummer geschrieben, der meinem richtigen ICQ-Bot alle 10sec eine Nachricht sendet. Dadurch dass mein richtiger ICQ-Bot eine Nachricht empfängt, kann er wieder eine Nachricht empfangen. Die falschen Nachrichten werden natürlich herausgefiltert. Das einzige Problem dabei ist, dass die Client-Datenrate manchmal überschritten wird.
Wenn jemandem noch eine bessere Lösung einfällt, bitte melden.
// EDIT:
Hab das Problem jetzt behoben. Die Lösung ist sehr einfach: Es gibt eine neuere, umfangreichere Version von "WebICQLite". Sie heißt "WebICQPro". Darin sind wesentlich mehr Funktionen enthalten und die Sockets blockieren nicht.
Geändert von Erstar (19.04.2012 um 10:44 Uhr)
-.-
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)