[php] msn scriptje fout

Pagina: 1
Acties:

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
Hoi ik wil een php script maken die naar msn connect.
volens mij lijkt alles goed maar msn server gooit meteen connectie dicht.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$msn[server] = "64.4.13.45";
$msn[port] = "1863";

$msnsocket = fsockopen ($msn[server], $msn[port], $errno, $errstr, 30);
if (!$msnsocket) {
    echo "$errstr ($errno)<br>\n";
} else {
    $msn_num++;
    fputs ($msnsocket, "VER $msn_num MSNP7 MSNP6 MSNP5 MSNP4 CVR0\n");
    echo "socket verbonden";
while(!feof($msnsocket)) {
$input = fgets($msnsocket,128);
echo "$input <br>\n";
}
}
?>

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Waneer gooit 'ie hem exact dicht?
Voor of na het sturen van je versie?

Ik weet niet wat je precies doet met $msn_num, maar als 'ie op nul begint is dat de oorzaak. Hij moet namelijk minimaal op 1 beginnen. mt_rand() is wellicht een betere keuze.

Localhost, sweet localhost


  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
hij gooide hem dicht na dat hij command stuurde
maar de server is niet blij genoeg met een \n
hij wil \r\n :)
zelf getest :P

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
Ieks
next probleem
server zend: 'XFR 3 NS 64.4.13.63:1863 0'
ik weet niet hoe ik dat oplos
hij moet dus connecten naar 64.4.13.63 op port 1863
dus dat veranderen we eventjes
PHP:
1
2
3
4
5
6
7
<?
    if (strtolower($input[0]) == "xfr" &amp;&amp; strtolower($input[2]) == "ns") { 
$input = explode(":", $input[3]);
$msn[server] = "$input[0]";
$msn[port] = "$input[1]";
}
?>

zow klaar
hoe zorgen we er nou weer voor dat hij terug naar boven gaat waar de staat dat hij moet connecten?

Verwijderd

Op zondag 06 januari 2002 00:30 schreef Martink het volgende:
Ieks
next probleem
server zend: 'XFR 3 NS 64.4.13.63:1863 0'
ik weet niet hoe ik dat oplos
hij moet dus connecten naar 64.4.13.63 op port 1863
dus dat veranderen we eventjes
PHP:
1
2
3
4
5
6
7
<?
    if (strtolower($input[0]) == "xfr" &amp;amp;&amp;amp; strtolower($input[2]) == "ns") { 
$input = explode(":", $input[3]);
$msn[server] = "$input[0]";
$msn[port] = "$input[1]";
}
?>

zow klaar
hoe zorgen we er nou weer voor dat hij terug naar boven gaat waar de staat dat hij moet connecten?
Ik ben (nog) niet erg bekend met php (wel met mirc taal, lijkt er op) maar kan dat niet met :goto? :)

  • goalgetter
  • Registratie: Juni 1999
  • Laatst online: 25-08 15:24
Het is geen basic hoor :)

Je zou natuurlijk kunnen proberen om die connect in een functie te duwen, en afhankelijk van wat je terug krijgt een of andere flag te setten. Dan een switch statement erin en waar je de acties bij de verschillende flags definieert.

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
en dan naar het verzetten weer in msn_connect(); doen?

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
dan heb ik het zo en hij doet niks meer:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?
$msn[email] = "ghostbot@chatbox4u.nl.nu";
$msn[pass]  = "";

msnconnect();

function msnconnect() {
$msn[server] = "64.4.13.45";
$msn[port] = "1863";
global $msn;
$msnsocket = fsockopen ($msn[server], $msn[port], $errno, $errstr, 30);
if (!$msnsocket) {
    echo "$errstr ($errno)<br>\n";
} else {
    $msn_num++;
    fputs ($msnsocket, "VER $msn_num MSNP7 MSNP6 MSNP5 MSNP4 CVR0\r\n");
while(!feof($msnsocket)) {
$input = fgets($msnsocket,128);
    echo "$input <br>\n";
       $input = explode(" ", $input);
       if (strtolower($input[0]) == "ver") { $msn_num++; fputs ($msnsocket, "INF $msn_num\r\n"); }
       if (strtolower($input[0]) == "inf") { $msn_num++; fputs ($msnsocket, "USR $msn_num MD5 I $msn[email]\r\n"); }
    if (strtolower($input[0]) == "xfr" &amp;&amp; strtolower($input[2]) == "ns") { $input = explode(":", $input[3]); $msn[server] = "$input[0]"; $msn[port] = "$input[1]";   }
    }
}
?>

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
hmmm niemand weet waarom het niet werkt :'(

Verwijderd

Loop ut eens rustig door... hij gaat niet overnieuw connecten!

Ik heb zelf een MSN component gemaakt voor Delphi, en je kan het beter wat anders opbouwen:

Maak een aantal functies:

1: msn_connect
2: msn_handle_commands
3: msn_read

Zorg dat je connect met 1), zorg vervolgens dat je naar 3) gaat en daar loop je door de shit heen, wachtend op reactie van de server. Krijg je die, laat je command voor command behandelen door 2). Als je krijgt dat je ergens anders heen moet connecten, ga dan naar 1) toe, en zorg dat 3) stopt... 1) roept 3) weer aan, en het feest gaat verder :) Snappie? Vast niet, maar ach :P SUCCES!

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
Op zondag 06 januari 2002 17:40 schreef TrueLight het volgende:
Loop ut eens rustig door... hij gaat niet overnieuw connecten!
[..]
sterker nog hij connect helemaal niet :(
daarom vroeg ik het hier wat er fout aan was
als ik hem buiten functie zet connect hij wel maar binnen niet..

Verwijderd

Oh, dat probleem licht simpeler:

Zet je GLOBAL effe VOOR het defineren van $msn... scheelt wat override van $msn :)

Dat verhelpt waarschijnlijk het probleem :) Nogmaals: succes!

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
Nee er was een ander fout maar in php.ini stond dat hij fouten niet mocht laten zien maar meteen heb ik weer een raar probleem :(
server zegt: USR 49 MD5 S 1010266835.443995963
dus dan split ik het

$input = split(" ", $input);

zo dus maar dan zou $input[4] dat nummer moeten zijn maar dat $input[4] is niks
en $input[3] is "S"
:(
en dat nummer heb ik nodig :'(

Verwijderd

Op zondag 06 januari 2002 20:08 schreef Martink het volgende:
Nee er was een ander fout maar in php.ini stond dat hij fouten niet mocht laten zien maar meteen heb ik weer een raar probleem :(
server zegt: USR 49 MD5 S 1010266835.443995963
dus dan split ik het

$input = split(" ", $input);

zo dus maar dan zou $input[4] dat nummer moeten zijn maar dat $input[4] is niks
en $input[3] is "S"
:(
en dat nummer heb ik nodig :'(
a) advies: gebruik niet voor een split dezelfde naam als achter de split

b) gebruik explode ipv split, zal waarschijnlijk helpen :)

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
Op zondag 06 januari 2002 20:10 schreef TrueLight het volgende:

[..]

a) advies: gebruik niet voor een split dezelfde naam als achter de split

b) gebruik explode ipv split, zal waarschijnlijk helpen :)
vals alarm :)
er zat een enter of ja \n\r in de $input[4] :P
moest eerst die eruit gooien :)
ik dacht dat hij niks was.
maar ik heb nog een vraagje
nu laat hij pas zien wat msn zegt als script stopt
ken je dat ook doen dat hij het de heletijd laat zien? als hij het binnen krijgt van de server ik heb meteen echo staan als hij het binnen krijgt maar dat doet hij niet :'(

Verwijderd

Op zondag 06 januari 2002 20:19 schreef Martink het volgende:

[..]

vals alarm :)
er zat een enter of ja \n\r in de $input[4] :P
moest eerst die eruit gooien :)
ik dacht dat hij niks was.
maar ik heb nog een vraagje
nu laat hij pas zien wat msn zegt als script stopt
ken je dat ook doen dat hij het de heletijd laat zien? als hij het binnen krijgt van de server ik heb meteen echo staan als hij het binnen krijgt maar dat doet hij niet :'(
KUT CHELLO! Poging 3 tot reply: (sorry, wordt kortaf ervan)

ob_end_flush(); gebruiken. Na elke echo moet je die doen, die gooit alles door naar de output. Sommige browsers (sorry, niet buffers) hebben eerst 1024 bytes (of een eindbyte) nodig voordat ze iets laten zien, dat moet je effe kijken. Anders 1024 dummybytes er doorheen gooien. Dus:

echo "blaat";
ob_end_flush();

dat krijg je dan! :) SUCCES!

edit:

KUT CHELLO! Dan nog typos ook :(

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
Warning: Use of undefined constant email - assumed 'email' in c:\foxserv\www\msn\index.php on line 2

En hoe krijg ik Warnings weg?

Verwijderd

Op zondag 06 januari 2002 20:30 schreef Martink het volgende:
Warning: Use of undefined constant email - assumed 'email' in c:\foxserv\www\msn\index.php on line 2

En hoe krijg ik Warnings weg?
E_ALL & E_NOTICE

als waarschuwing ding zetten in PHP ipv E_ALL alleen :) Noticen zijn kut dingen :)

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
dat flush ding werkt niet echt hoor :(
hij flusht niet door niet door :(

Verwijderd

Op zondag 06 januari 2002 20:57 schreef Martink het volgende:
dat flush ding werkt niet echt hoor :(
hij flusht niet door niet door :(
Zoals ik al zei, je hebt met een buffer te maken :)

Moet je effe in een command-prompt handmatig effe php runnen...

(als hij op l:\ staat, genaamd msn.php, doe je:

cd l:\
php msn.php

)

en dan kan je zien of hij het echt NIET doet, ofdat je browser aan ut kutten is :)

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
Mijn browser is aan het kutten :P
kan dat ook opgelost worden?

Hoe laat ik een nieuw venster openen als hij iets van server krijgt?

Verwijderd

Op zondag 06 januari 2002 21:07 schreef Martink het volgende:
Mijn browser is aan het kutten :P
kan dat ook opgelost worden?

Hoe laat ik een nieuw venster openen als hij iets van server krijgt?
Zoals ik al zei: 1024 dummy bytes er door heen pleuren (dus gewoon 1024x een spatie ofzo... dat werkt 99% van de tijd zonder problemen :) Of tja... dan kom je bij ingewikkelde truken en gekkeheidjes.... wat zelfs dit forum te buiten gaat ben ik bang van zo :) LOL! Misschien dat nog iemand anders een suggestie heeft, maar ik zal ut zo 1,2,3 niet weten.... :)

Oh ja, wacht effe... nog 1tje: wegschrijven in een file wat je doet, en dan via een andere browser die file elke keer refreshen... dan kan je in princiepe ook zien wat ie doet :) (dom dom dom, had ik ook gelijk kunnen bedenken :P :) Hihi!)

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
jamaar hoe laat ik dan een ander venster openen als er iets vanaf server gelezen word? en dan zonder knoppen bar en andere grote >:)
heb daar al een javascriptje voor
code:
1
2
3
4
5
6
7
8
9
10
<script language="javascript">
<!--
    function popup( the_file ) {
        the_popup = window.open( the_file,"","height=350,width=645,toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resize=no");   
        if (window.focus) {
            the_popup.focus();
        }
    }
//-->
</script>

maar hoe roep ik dat aan als er iets van server gelezen word?

Verwijderd

Das dus heel ut probleem: NIET :) LOL! Moet je dat VOORDAT je het werkelijk script opent doen... ik bedoel:

index.html -> begin pagina
msn.php -> opent MSN connectie, schrijft in log
popup.php -> popup die elke 5 sec het log leest ofzo

index.html opent popup.php in een popup en laadt vervolgens msn.php in (met window.location='' bijv)...

dat zal een goeie oplossing zijn bijvoorbeeld :)

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
Bij het ontvangen van tekst kan ik natuurlijk doen dat hij leest uit mysql :)

Maar ik weet nu nog steets niet hoe hij vanzelf venster opent :(
als hij een regeltje laat zien
weet alleen met dat onload in body tag :'(

Verwijderd

Op zondag 06 januari 2002 21:26 schreef Martink het volgende:
Bij het ontvangen van tekst kan ik natuurlijk doen dat hij leest uit mysql :)

Maar ik weet nu nog steets niet hoe hij vanzelf venster opent :(
als hij een regeltje laat zien
weet alleen met dat onload in body tag :'(
Ach, al tobbend wordt men wijs :) Gewoon van alles en nogwat proberen joh :) Wat ik hierboven zei zal ik als oplossing kiezen.... het werkt in ieder geval :) Maar verder is het domweg tobben :) We kunnen niet alles blijven voorzeggen :P :)

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
En volgens mij moet ik dat msn ding dat connect ook nog los laten draaien want internet explorder breekt telkens de verbinding tussen server en *sniff*
maar dan moet ik per user zo een ding draaien ?
ja zeker he :'(

Verwijderd

Op zondag 06 januari 2002 21:34 schreef Martink het volgende:
En volgens mij moet ik dat msn ding dat connect ook nog los laten draaien want internet explorder breekt telkens de verbinding tussen server en *sniff*
maar dan moet ik per user zo een ding draaien ?
ja zeker he :'(
Nu in het nederlands? :)

Bedoel je dat als je IE sluit, dat dan het script stopt? Zo ja, dan moet je eens proberen: set_user_abort geloof ik.... zoek maar in PHP manual :P :)

  • Martink
  • Registratie: Juni 2001
  • Laatst online: 14-09 13:52
ignore_user_abort(true);

maare ik weet alweer. ik maak gewoon in mysql een database aan voor msn. met wat table's

1e table: voor laaste reactie van persoon zodat msn scriptje zich na 30 sec er mee kapt als andere page niet meer in leest.

2e table: waar php script ingooit wat server zegt en wat er gestuurt moet worden naar server.

3e table: voor user connectie's :) (zelfte manier als table 2)
Pagina: 1