Client / serveur : les sockets

Soyez le premier à donner votre avis sur cette source.

Vue 11 925 fois - Téléchargée 2 399 fois

Description

Il y peu de sources utilisant les sockets ici, aussi voila un exemple de client / serveur en PhP afin d'illustrer l'utilisation des sockets.

Le serveur et le client sont décomposés en deux classe chacun : la classe de base implémentant les mécanismes d'ouverture des sockets, la lecture et l'écriture sur celles ci et tous les mécanismes de base, puis la classe qui va gérer la partie loop et le timeout.

Ici le client et le serveur sont très simplistes et s'échangent bêtement des messages sans s'arrêter mais le fonctionnement est la.

Pour tester cette source je vous conseille fortement d'utiliser Cygwin :)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Afyn
Messages postés
613
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
22 décembre 2016

Bonjour

Ca semble fonctionner ^^
C'est possible d'avoir plus d'infos ? sur le fonctionnement !

Merci d'avance
Morphinof
Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
3
Hello !

Quand on lance le serveur celui ouvre une socket sur un port et écoutes toutes les connections client qui arrivent sur le dit port.
Le client lui ouvre une sockect qui se connecte via ce port au serveur.
Lorsqu'un client se connecte le serveur stocke ce client dans un tableau de client, le serveur envois régulièrement aussi un message "live" a sa liste pour retirer les clients déconnectes.

Voila ^^
Afyn
Messages postés
613
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
22 décembre 2016

Autre précision :

Quand on connecte plusieurs clients, la fonction listen semble ne pas renvoyer les datas à tous les clients connectés.

(J'ai plein de choses à apprendre avec cette source ... elle est vraiment super)
Morphinof
Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
3
Cette fonction réponds au client que si le client envoi un message comme suit : if (($datas = $this->read($client))) alors je reponds.

A priori ca devrai donc marcher, mais je n'ai pas pu tester avec plusieurs connections, est ce que le serveur te dit qu'il y a 2 connectés et si oui est ce que tes deux clients envoient bien un message au serveur ?
Afyn
Messages postés
613
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
22 décembre 2016

/*
* Boucle infinie du serveur, attente des connections
*/
public function loop()
{
if(($client = socket_accept(self::$socket)) !== false)
{
echo 'New client '.$client.' has connected'.BR;
self::$clients[] = $client;
}

$this->listen();

ob_flush();
usleep(SERVER_LOOP_SLEEP);

if ($this->continue)
$this->loop();
}

J'ai une erreur avec cette ligne : if(($client = socket_accept(self::$socket)) !== false)

même lorsque le serveur tourne seul (personnes de connecté)

Je vois ça dans le fichier error_log :
socket_accept() [['function.socket-accept function.socket-accept]]: unable to accept incoming connection [11]

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.