Bonjour !
J'ai un problème avec socket_bind() :
dans un code de mini-chat je dois lancer un script dans lequel il y a un socket_bind le problème est que ça plante et affiche ce message pour la fonction socket bind :
Warning: socket_bind() [function.socket-bind]: unable to bind address [0]: Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est habituellement autorisée. in C:\Program Files\EasyPHP 3.0\www\serveur.php on line 27
Port déja utilise
savez vous en général ce qui peut empêcher socket_bind() de fonctionner ? Quelles sont les erreurs typiques avec cette fonction ?
mon script se présente comme ceci (c'est le script créé par azmeuk sur le SDZ dans le tuto sur les sockets en php) :
<?php
set_time_limit(0);
//On crée notre classe
class Chat_Server
{
var $socket=NULL;
var $client=NULL;
//Méthode qui démarre le serveur
function Start($adresse,$port)
{
echo"Lancement du serveur...\n";
$this->clients=array();
//Création de la socket
$this->socket = socket_create(AF_INET, SOCK_STREAM,SOL_TCP);
if($this->socket)
{
echo "creation de socket reussie !\n";
}
// socket_close($this->socket);
//on lie la ressource sur laquelle le serveur va écouter

socket_bind($this->socket, $adresse,$port) or die("Port déja utilise\n");
echo socket_last_error()."<br></br>";
echo socket_strerror(socket_last_error());
//socket_connect($this->socket, $adresse, $port) or die("Bug !\n");
//On prépare l'écoute
socket_listen($this->socket);
//Boucle infinie, car le serveur ne doit s'arrêter que si on lui demande
while(true)
{
//Le code se bloque jusqu'à ce qu'une nouvelle connexion client soit établie
$this->client = socket_accept($this->socket);
//Cette méthode lit les données reçues par un client, et les redistribue
$reception = socket_read($this->client , 255);
$pseudo = substr($reception , 0 , strpos($reception , ' '));
$message = substr($reception , strpos($reception , ' ')+1 , strlen($reception));
//Le message est "/connect", donc on stocke la socket dans le tableau
if($message == "/connect")
{
$this->clients[$pseudo]=$this->client;
echo "$pseudo connected\n";
}
//C'est donc un message : ici on va envoyer le message vers chacun des clients
else
{
echo "Pseudo: [".$pseudo."] Message recu: [".$message."] Message envoye a : ";
//On passe chaque case du tableau = chaque client, et on lui envoie le message
foreach( $this->clients as $nom_case => $socket_en_cours)
{
//Si ça ne marche pas, c'est qu'il est déconnecté
if(@socket_write($socket_en_cours, $reception, strlen($reception)) === false)
{
//La socket est enlevée du tableau
unset($this->clients[$nom_case]);
echo "[$nom_case s'est deconnecte]";
}
else
echo "$nom_case ";
}
//On ferme la socket qui vient de nous apporter un message
socket_close($this->client);
echo"\n";
flush();
}
}
}
}
$chat = new Chat_Server();
$chat->Start('192.168.x.x',35353);
?>
ma config :
J'utilise easyphp comme serveur en local que j'ai rendu accessible dans tout le reseau local via l'adresse ip du serveur.
Merci pour vos rep. !




@+!
;-)