ugrás a tartalomhoz

Kapcsolódás fsockopen-nel DC-re

Anonymous · 2005. Szep. 11. (V), 04.27
Hello,

Azt szeretnem meg tudni hogy hogyan lehet egy aktiv fsockopen kapcsolatban "meg alapitani", hogy a szervertol amelyre csatlakoztunk meg kaptunk-e egy bizonyos valaszt...

Egy Direct Connect YnHub-ra csatlakozok a dc protokol szerint kapok a szervertol egy $Lock <lock> Pk=<pk>| valaszt azonal ahogy a socket kapcsolat megnyilt, erre kell adjak egy $Key <key-generated-from-lock>|$ValidateNick <nick>| valaszt a szerver erre valaszol $HubName <hub-name>|$Hello KEFE2| es en erre kellene valaszoljam $MyINFO $ALL <nick> <intrest>$ $<speed>$<email>$<share>$|$Version 1.0091|$GetNickList|, a problemam az hogy nem tudom hogyan kellene a scriptet "varatni" a reply-k kuldesevel egesz adig mig a szerver nem valaszol pontosaban nem keri a megfelelo replyt, jelent pillanatban a scriptel idaig jutotam el:
  1. <?php  
  2. require("test2.php");  
  3. $addr = "127.0.0.1";  
  4. $port = "411";  
  5. $fp = pfsockopen($addr$port$errno$errstr, 1);  
  6. $KeyLockString = fgets($fp, 73);  
  7. $KeyLockString = substr($KeyLockString, 6);  
  8. if (!$fp) {  
  9.    echo "$errstr ($errno)<br />\n";  
  10. else {  
  11. $KeyString = lock2key($KeyLockString);  
  12. $out = "\$Key $KeyString|\$ValidateNick KEFE2|\r\n";  
  13. $out .= "\$MyINFO \$ALL KEFE2 TestPHPBot Control\$ \$BOT1\$akarmi##kukac##valami.com\$0\$|\r\n";  
  14. $out .= "\$Version 1.0091|\r\n";  
  15. $out .= "\$GetNickList|\r\n";  
  16. fwrite($fp$out);  
  17. $sockReply_t = fgets($fp, 128);  
  18. echo "$sockReply_t\n\n<br>";  
  19. echo fgets($fp, 128);  
  20. }  
  21. fclose($fp);  
  22. ?>  
a test2.php van a key2lock funkcio ami jelen pillanatban nem fontos es amugy mukodik (ha nem mukodne a server nem kuldene a $Hello| valaszt), de sajnos a fenti scriptem csak a $Hello| valaszig jutt el valahogy varatnom kellene a scriptet hogy NE kuldje a $MyINFO sort egesz adig mig a szerver nem keri ezt viszont sajnos nem tudom hogyan kellene meg oldanom...
 
1

szerintem

Anonymous · 2005. Szep. 11. (V), 09.30
  1. $out = "\$Key $KeyString|\$ValidateNick KEFE2|\r\n";  
  2. fwrite($fp$out);  
utána ha fgets()-el megkapod a választ, akkor mehet tovabb. stream_set_timeout()-al meg betudod állítani a max várakozási időt.

üdv.: Zsolt
2

megoldva

Anonymous · 2005. Szep. 11. (V), 10.07
idokozben sikerult meg oldanom, a problema a \r\n volt ugyanis a dc protokolja ezt nem ismeri, mindent egyszere kell kuldenem | -el elvalasztva kulonben lezarja a csatlakozast es vegul time outal bontja a socketet igyhat igy nez ki a script loginolast kuldo resze:
  1. <?php  
  2. $out = "\$Key $KeyString|";  
  3. $out .= "\$ValidateNick NICK|";  
  4. $out .= "\$MyPass JELSZO|";  
  5. $out .= "\$Version 1.0091|";  
  6. $out .= "\$GetNickList|";  
  7. $out .= "\$MyINFO \$ALL NICK PHP StatBot\$ \$BOT\$email##kukac##email.com\$0\$|";  
  8. $out .= "\$GetINFO NICK NICK|";  
  9. fwrite($fp$out);  
  10. echo fgets($fp, 1028);  
  11. ?>  
mostmar csak a kilepes a gond, stream_set_timeout() nem jo mert azal ismetlodik az egesz parancs sor ujra es ujra azert pedig bannol a dc server... valami mas meg oldas kell a socket bontasara...