Hej!
Första omgången med sockets för mig. Jag försöker bara på skojj kommunicera med en POP3-server.
<?php
$server = fsockopen('localhost', 110);
define ('SOCKET', $server);
$fas = 1;
while(SOCKET){
echo(fgets(SOCKET, 4096));
if($fas == 1) {
fputs(SOCKET, 'USER andreas', 512);
$fas++;
} else if ($fas == 2) {
fputs(SOCKET, 'PASS hej', 512);
}
}
?>
När jag kör filen genom php-cgi.exe så får jag bara upp serverns välkomsmeddelande, sen är det stopp. Jag har studerat lite andra skript, och tycker att de är konstruerade på liknande sätt. Någon som kan ge lite tips om på vad som kan vara tokigt.
Tacksam för svar!
tydalMedlem sedan juni 20034 013 inlägg 512 ser lite konstigt ut. Där borde det väl stå längden på den sträng du skickar? Och så ska det vara ny-rad efter varje kommando.
Det gör ingen skillnad vad jag än sätter istället för 512. Jag testar att sätta \r\n framför strängen jag skickar, men det hjälper inte. Tror inte att de har någonting med saken att göra. Men det var bra tankar. Jag gjorde lite undersökningar för att kolla var scriptet stannar. Jag kan skicka det första kommandot, men det är när scriptet försöker skriva ut resultatet en andra gång som det slutar, det verkar som om while(SOCKET) slutar att gälla.
tydalMedlem sedan juni 20034 013 inlägg
andreaswebb skrev:
Men det var bra tankar.
:-)
Jag har skrivit en del klienter och servrar som snackar POP3, bland annat Poputil: http://www.tydal.nu/article/90
Du måste ha ny-rad =efter= varje kommando (inte före). För att \r\n ska utläsas som CRLF i Php måste du ha det inom citationstecken (inte apostrofer).
fwrite(SOCKET, "USER andreas\r\n");
fwrite(SOCKET, "PASS hej\r\n");
Och sen bör du väl göra något när du kommer in. STAT t.ex, och sedan QUIT. Nu kommer den ju bara att skicka "PASS hej" i all oändlighet...
Nu funkar det kanon! Tack ska du ha..:)