IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

Utilisation des sockets


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 55
    Par défaut Utilisation des sockets
    Je tente de travailler avec des sockets en local et j’ai des erreurs que je n’arrive pas à corriger. Pourriez-vous m’aider, s’il vous plait ?
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    <?php
    //Temps maximum d'exécution de la page <gras><couleur nom="rouge">nul</couleur></gras>
    set_time_limit(0);       
     
    //Coordonnées du serveur == le pc qui lancera cette page
    $port = 5502;
    $adresse = "localhost";
     
    //On crée la socket
    $socket = socket_create(AF_INET, SOCK_STREAM, 0);
    if(($socket) === false)
            echo 'La création de la socket a échoué : '.socket_strerror($socket)."\n<br />";
     
    //On assigne la socket à une adresse et à un port, que l`on va écouter par la suite
    $assignation = socket_bind($socket, $adresse, $port);
    if($assignation  < 0)
            echo "L'assignation de la socket a échoué : ".socket_strerror($assignation)."\n<br />";
     
    //On prépare l`écoute
    $ecoute = socket_listen($socket);
    if(($ecoute) === false)
            echo "L'écoute de la socket a échoué : ";			//.socket_strerror($ecoute)."\n<br />";
     
    //Le code se bloque jusqu`à ce qu'une nouvelle connexion client soit établie
    $client = socket_accept($socket);
    if(($client) === false)
            echo "Le client n'a pas pu se connecter : ";			//.socket_strerror($client)."\n<br />";
     
    //Lors d'une connexion, le code reprend ici, il est temps de lire ce qu'on nous envoie
    if(($reception = socket_read($client , 255)) === false)
            echo "La socket n'a pas pu être lue : ".socket_strerror($reception)."\n<br />";
    elseif( $reception == 'plop' )
            $reponse = "J'aime les plop";
    else
            $reponse = "J'aime pas les ".$reception;
     
    //Si ça ne marche pas, c'est qu`il est déconnecté
    if(( socket_write($client, $reponse, strlen($reponse)) ) === false)
            echo "Client déconnecté\n<br />";
    else
            echo "Message envoyé : ".$reponse;
     
    //Fermeture de la socket du client
    socket_close($client);
     
    //Fermeture du serveur
    socket_close($socket);
    ?>
    1e erreur :
    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 D:\EasyPHP-5.3.2i\www\workspace\weblux_php\brouillon.php on line 15
    Est-ce un problème de port ? J’en ai déjà essayé un certain nombre sans succès.

    2e erreur :
    Warning: socket_listen() [function.socket-listen]: unable to listen on socket [0]: Un argument non valide a été fourni. in D:\EasyPHP-5.3.2i\www\workspace\weblux_php\brouillon.php on line 20
    Quel est l’argument non valide ? la socket n’est pas reliée à un client, je sais. Mais je ne crois pas que cela ne justifie pas l’erreur : lorsqu’un serveur marche, le client n’est pas toujours connecté.

    Petite précision : je ne suis pas administrateur sur ma machine. Es-ce que mes problèmes peuvent venir de là ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 33
    Par défaut
    Petite précision : je ne suis pas administrateur sur ma machine. Es-ce que mes problèmes peuvent venir de là ?
    Sur un système UNIX, ca pose problème, donc il est possible que sous windows aussi;

    Sinon, une petite remarque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $assignation = socket_bind($socket, $adresse, $port);
    if($assignation  < 0)
            echo "L'assignation de la socket a échoué : ".socket_strerror($assignation)."\n<br />";
    Tu ne passera jamais dans ton if (http://www.php.net/manual/en/function.socket-bind.php): assignation vaut FALSE ou TRUE...

    Bonne journée

  3. #3
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 55
    Par défaut
    Merci pour ton aide zuurstof.
    Citation Envoyé par zuurstof
    Tu ne passera jamais dans ton if (http://www.php.net/manual/en/function.socket-bind.php): assignation vaut FALSE ou TRUE...
    J’ai corrigé l’erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $assignation = socket_bind($socket, $adresse , $port);
    if($assignation == false)
            echo "L'assignation de la socket a échoué.";
    Et lors de l’exécution il rentre dans le if, je pense suite à mon problème de port.

    Citation Envoyé par zuurstof
    Sur un système UNIX, ca pose problème, donc il est possible que sous windows aussi;
    J’ai essayé sur un ordinateur où j’étais administrateur et j’ai toujours la même chose. Mais peut-être qu’il faut que je soit administrateur et en plus que je corrige une erreur dans le code.
    Est-ce que quelqu’un à un autre avis sur la question ?

  4. #4
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 55
    Par défaut
    Je me suis aperçue que tous les warning signalés par ce programme se résolvent si j’arrive à résoudre le premier à savoir « Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est habituellement autorisée ». je ne vois pas pourquoi l’adresse ne question serait déjà utilisé.
    Quelqu'un a-t-il une idée ? ? ?

Discussions similaires

  1. Utilisation des Socket
    Par Bull_ dans le forum C++
    Réponses: 4
    Dernier message: 11/03/2007, 15h48
  2. [c#] Utilisation des sockets
    Par zwoke dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/09/2006, 09h28
  3. [Socket][C++]Utilisation des sockets sur internet
    Par ChriGoLioNaDor dans le forum Développement
    Réponses: 8
    Dernier message: 13/01/2006, 21h38
  4. [MFC] Faible utilisation des sockets via les MFC ?
    Par Yellowmat dans le forum MFC
    Réponses: 1
    Dernier message: 25/08/2005, 17h15
  5. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo