2009-03-29 9 views
1

Voici mon codeSocket PHP ne fonctionne pas

<?php 
error_reporting(E_ALL); 

/* Allow the script to hang around waiting for connections. */ 
set_time_limit(0); 

/* Turn on implicit output flushing so we see what we're getting 
* as it comes in. */ 
ob_implicit_flush(); 

$address = 'localhost'; 
$port = 10000; 

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { 
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; 
} 

if (socket_bind($sock, $address, $port) === false) { 
    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; 
} 

if (socket_listen($sock, 5) === false) { 
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; 
} 

do { 
    if (($msgsock = socket_accept($sock)) === false) { 
     echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; 
     break; 
    } 
do { 
    $out = socket_read($msgsock, 2048); 

    if (!empty($out)) { 
     if ($out == 'quit') { 
      break; 
     } 
     elseif ($out == 'shutdown') { 
      socket_write($msgsock, 'plc down', 8); 
      socket_close($msgsock); 
      break 2; 
     } 
     else { 
      switch ($out) { 
       case "KABBE": $response = "Kabbe te!"; break; 
       case "SZOPJ": $response = "Szopjal te!"; break; 
       default: $response = "Ismeretlen parancs"; 
      } 
      socket_write($msgsock, $response, strlen($response)); 
      break; 
     } 
    } 
    } while (true); 
socket_close($msgsock); 
} while (true); 

socket_close($sock); 
?> 

et maintenant les erreurs

 
Warning: socket_bind() [function.socket-bind]: unable to bind address [0]: Only one usage of each socket address (protocol/network address/port) is normally permitted. in C:\wamp\www\socket\socket.php on line 18 
socket_bind() failed: reason: Only one usage of each socket address (protocol/network address/port) is normally permitted. 
Warning: socket_listen() [function.socket-listen]: unable to listen on socket [0]: An invalid argument was supplied. in C:\wamp\www\socket\socket.php on line 22 
socket_listen() failed: reason: An invalid argument was supplied. 
Warning: socket_accept() [function.socket-accept]: unable to accept incoming connection [0]: An invalid argument was supplied. in C:\wamp\www\socket\socket.php on line 27 
socket_accept() failed: reason: An invalid argument was supplied. 

Je recherche sur google mais rien d'utile. Quel est le problème?

Répondre

0

Cela signifie que vous avez déjà un socket ouvert sur votre ordinateur sur ce port. Essayez de passer à un autre port inutilisé.

Windows (qui est ce que vous semblez travailler sur), vous pouvez voir la liste des sockets ouvertes de la ligne de commande:

netstat -an 

Si vous voulez savoir quels processus sont à l'écoute de ces ports , essayez ceci:

netstat -ban 
1

« localhost » est pas une adresse valide socket_bind n'accepte pas les noms DNS, utilisez l'adresse IP équivalente de « 127.0.0.1 ».

More info

3

PHP offre également stream_socket_server et d'autres fonctions stream_socket_ *.
J'ai trouvé que c'était plus convivial pour les développeurs.

code Exemple de php.net:

$socket = stream_socket_server("tcp://localhost:8000", $errno, $errstr); 
if (!$socket) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    while ($conn = stream_socket_accept($socket)) { 
    fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n"); 
    fclose($conn); 
    } 
    fclose($socket); 
}