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

Langage PHP Discussion :

Php et les sockets


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 47
    Points
    47
    Par défaut Php et les sockets
    Bonsoir à tous,

    J'ai un petit soucis avec l'exemple du manuel php concernant le serveur tcp/ip dont voici le 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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php
    error_reporting(E_ALL);
     
    /* Autorise l'exécution infinie du script, en attente de connexion. */
    set_time_limit(0);
     
    /* Active le vidage implicite des buffers de sortie, pour que nous
     * puissions voir ce que nous lisons au fur et à mesure. */
    ob_implicit_flush();
     
    $address = 'localhost';
    $port = 10000;
     
    if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
        echo "socket_create() a échoué : raison : " . socket_strerror(socket_last_error()) . "\n";
    }
     
    if (socket_bind($sock, $address, $port) === false) {
        echo "socket_bind() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
    }
     
    if (socket_listen($sock, 5) === false) {
        echo "socket_listen() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
    }
     
    do {
        if (($msgsock = socket_accept($sock)) === false) {
            echo "socket_accept() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
            break;
        }
        /* Send instructions. */
        $msg = "\Bienvenue sur le serveur de test PHP.\n" .
            "Pour quitter, tapez 'quit'. Pour éteindre le serveur, tapez 'shutdown'.\n";
        socket_write($msgsock, $msg, strlen($msg));
     
        do {
            if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
                echo "socket_read() a échoué : raison : " . socket_strerror(socket_last_error($msgsock)) . "\n";
                break 2;
            }
            if (!$buf = trim($buf)) {
                continue;
            }
            if ($buf == 'quit') {
                break;
            }
            if ($buf == 'shutdown') {
                socket_close($msgsock);
                break 2;
            }
            $talkback = "PHP: You said '$buf'.\n";
            socket_write($msgsock, $talkback, strlen($talkback));
            echo "$buf\n";
        } while (true);
        socket_close($msgsock);
    } while (true);
     
    socket_close($sock);
    ?>
    Je rencontre un léger problème à l'utilisation (en local) :

    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.
    J'en déduis que mon port 10000 n'est pas ouvert pour mon localhost. Du coup j'ai deux questions :
    - La première concerne ma démarche, j'exécute le fichier depuis mon navigateur, donc apache, donc le port 80, donc pas le 10000. Est-ce que l'erreur peut venir de là. Si oui, comment exécuter php en ligne de commande? J'ai tenté cette approche sans succés car visiblement les arguments --enable-sockets au lancement de php en ligne de commande ne sont pas pris en compte (malgrés un php.ini correctement modifié pour gérer les sockets). J'en déduis que j'ai rien compris.
    - La seconde concerne la manière d'ouvrir un port.

    Si vous pensez que je vais dans la mauvaise direction faites moi signe

    Bonne soirée,

    Smiff.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    J'ai tenté cette approche sans succés car visiblement les arguments --enable-sockets au lancement de php en ligne de commande ne sont pas pris en compte (malgrés un php.ini correctement modifié pour gérer les sockets).
    Fais un php --ini pour voir quel php.ini est utilisé, et assure-toi que l'extension sockets est bien active.
    Tu peux faire un php -i > phpinfo.txt pour voir si l'extension sockets est effectivement chargée (tu devrais avoir un Sockets Support => enabled).
    L'extension est bien active sinon tu n'aurais pas le msg d'erreur que tu as collé plus haut

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton code fonctionne.
    Ton port 10000 doit être occupé sur ton serveur, webmin utilise ce port par exemple.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 47
    Points
    47
    Par défaut
    > Séb : Bien vu, il utilisait le mauvais php.ini. Par contre pour le message d'erreur je l'obtenais en lançant le serveur depuis mon navigateur avec l'extension activée dans les options de Wamp donc forcément j'avais l'erreur. Mon problème étant son activation depuis la ligne de commande (d'ailleurs --enabled-sockets me fait toujours une erreur mais bon, détail).

    > Sabotage : j'ai changé de port et ça fonctionne.

    Donc grâce à vous ça a avancé, le serveur se lance et a l'air de fonctionner mais je vais pas crier victoire trop tôt, je met le post en résolu d'ici un ou deux jours histoire de voir si c'est vraiment bon.

    Merci,

    Smiff.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 47
    Points
    47
    Par défaut
    Je confirme la résolution du problème (enfin sauf avec mon hébergeur qui n'a pas l'air d'apprécier mon serveur... hop, site fermé, bon d'un autre côté, normal pour un mutualisé).

    Je met l'intitulé en Résolu, merci

    Bonne soirée,

    Smiff.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 47
    Points
    47
    Par défaut
    Et hop... vu que mon post est toujours là et que je rencontre un nouveau problème sur la même thématique j'en profite pour le continuer

    Situation :

    J'ai laissé tomber le serveur en php que je trouve en soit assez limité tout de même et j'ai passé deux jours à apprendre Java pour comprendre au mieux le tuto de Julien Defaut (ftp://ftp-developpez.com/defaut/tuto...erveurjava.pdf) sur la création d'un serveur de socket en Java.

    J'ai fait simple au niveau du Flash, juste pour le test :

    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
     
    var connexion:XMLSocket = new XMLSocket("localhost", 18000);
     
    connexion.addEventListener(Event.CONNECT, connexionReussie);
    connexion.addEventListener(Event.CLOSE, fermetureConnexion);
    connexion.addEventListener(DataEvent.DATA, receptionDonnees);
     
    function connexionReussie(pEvt:Event):void
    {
    	input_txt.htmlText += "Connexion réussie";
    }
     
    function fermetureConnexion(pEvt:Event):void
    {
    	input_txt.htmlText += "Fermeture de la connexion";
    }
     
    function receptionDonnees(pEvt:DataEvent):void
    {
    	input_txt.htmlText += pEvt.data;
    }
     
    function sendData(evt:Event):void
    {
    	if(evt['keyCode'] == Keyboard.ENTER)
    	{
    		connexion.send(output_txt.htmlText);
    		output_txt.htmlText = "";
    	}
    }
     
    stage.addEventListener(KeyboardEvent.KEY_UP, sendData);
    Le chat fonctionne parfaitement lorsque j'exécute le .swf depuis Flash lors de sa compilation (Ctrl + F12).

    Par contre dès que je le place dans un fichier html en local (et dans le même dossier que le serveur d'ailleurs). La connexion est directement suivie d'une déconnection.

    Je pense que c'est dû à une sécurité du player Flas mais je suis incapable de trouver des infos là dessus. Si quelqu'un a une idée, je prends

    Bonne journée à tous,

    Smiff.

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Aucune idée.
    Je ne connaîs absolument rien à Flash, et trop peu sur Java pour t'aider.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 47
    Points
    47
    Par défaut
    Merci quand même

    Je vais poster ce problème dans la partie flash, c'est plus logique.

    Bonne soirée,

    Smiff.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Hébergeur mutualisé qui autorise les sockets PHP
    Par pol2095 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 30/06/2014, 16h32
  2. [ODBC] Intranet en PHP : Lister les tables d'une base Access
    Par fblouet dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2003, 14h46
  3. [Kylix] cherche composants pour les sockets
    Par coriolis dans le forum EDI
    Réponses: 1
    Dernier message: 09/04/2003, 10h18
  4. Questionsssss sur les sockets?
    Par Nino dans le forum Développement
    Réponses: 5
    Dernier message: 01/04/2003, 21h11

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