Bonjour,
Il n'y a pas de questions débiles, surtout que je commence à peine à tremper les pieds dans les sockets, donc je ne maitrise vraiment pas grand chose (pour pas dire rien :p )
Donc pour les codes, voici ce que ça donne:
serveur.php:
<pre>
<?php
set_time_limit(0);
require_once('./config.php');
//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, 0);
if($this->socket===false){
die(socket_strerror(socket_last_error()));
}
//on lie la ressource sur laquelle le serveur va écouter
@$bind=socket_bind($this->socket, $adresse, $port);
if($bind===false){
die(socket_strerror(socket_last_error()));
}
//On prépare l'écoute
@$listen=socket_listen($this->socket);
if($listen===false){
die(socket_strerror(socket_last_error()));
}
//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);
if($this->client===false){
die(socket_strerror(socket_last_error()));
}
//Cette méthode lit les données reçues par un client, et les redistribue
$reception = socket_read($this->client , 255);
if($reception===false){
die(socket_strerror(socket_last_error()));
}
$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";
}
elseif($message == "/exit")
{
unset($this->clients[$pseudo]);
echo $pseudo." away!\n";
}
elseif($message == "/close")
{
$this->close();
}
//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();
}
}
}
function close(){
if($this->socket!==NULL){
socket_close($this->socket);
echo "Shuting down!\n";
}
else {
echo "No ressources find!\n";
}
exit();
}
}
$chat = new Chat_Server();
if(isset($_GET['close']) && $_GET['close']=='1'){
$chat->close();
}
else {
$chat->Start($address,$port);
}
?>
</pre>
send.php:
<?php
require_once('./config.php');
if(!empty($_POST['message']))
{
//Création de la socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket===false){
die(socket_strerror(socket_last_error()));
}
//Connexion au serveur
$connect=socket_connect($socket,$address,$port);
if($connect===false){
die(socket_strerror(socket_last_error()));
}
//Construction du paquet à envoyer au serveur
$paquet=str_replace(' ' , ' ' ,$_POST['pseudo']).' '.$_POST['message'];
//Ecriture du paquet vers le serveur
$write=socket_write($socket,$paquet,strlen($paquet));
if($write===false){
die(socket_strerror(socket_last_error()));
}
//Fermeture de la connexion
socket_close($socket);
}
?>
et reception.php:
<?php
set_time_limit(0);
require_once('./config.php');
$pseudo=$_POST['pseudo'] ;
@$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket===false){
die(socket_strerror(socket_last_error()));
}
@$connect=socket_connect($socket, $address, $port);
if($connect===false){
die(socket_strerror(socket_last_error()));
}
else
{
$message = $pseudo." /connect";
@$write=socket_write($socket, $message , strlen($message));
if($write===false){
die(socket_strerror(socket_last_error()));
}
while(true)
{
if($input = @socket_read($socket, $port))
{
$pseudo = stripslashes(substr($input , 0 , strpos($input , ' ')));
$message = stripslashes(substr($input , strpos($input , ' ')+1 , strlen($input)));
echo '['.$pseudo.']: '.$message.'<br />';
flush();
}
else
{
echo "Le serveur a été éteint";
break;
}
}
socket_close($socket);
}
?>
Voilà les trois script qui utilisent les socket...
serveur.php est lancé à côté tourne en continue,
send.php est appelé au coup par coup,
et reception.php est appelé via ajax en tant que listener...
Et voici le fichier de config:
<?php
$address='127.0.0.1';
$port=3535;
?>
Je répondrais aux question plus tard si le code ne suffit pas...

Merci d'avance!