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 :

Socket avec PHP


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 127
    Points : 78
    Points
    78
    Par défaut Socket avec PHP
    bonjour tout le monde,
    j'ai besoin de créer une socket qui permet de se connecter sur le serveur 192.168.1.15 avec une connexion "tcp" et sur le port 4000. Le programme sur le serveur est programme en C++ et il retourne une chaine de caractère contenant des balises XML : <request><plant><data><read/></data></plant></request>, et ma Socket est programmée en PHP. J'ai besoin de récupérer cette chaine de caractère. 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
    $fp = fsockopen("tcp://192.168.1.15", 4000, $errno, $errstr, 30);
    if (!$fp) {
        echo "it is K.O !";
        echo "$errstr ($errno)<br />\n";
    } else {
    	echo "it is Ok !";
    	if ($fp) {
    		while (($buffer = fgets($fp, 4096)) !== false) {		
    			echo "response = ".$buffer;
    		}
    		if (!feof($fp)) {
    			echo "Error: unexpected fgets() fail\n";
    		}
    		fclose($fp);
    	} 
    }
    le navigateur n'affiche que
    "it is Ok !"

  2. #2
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    je sais pas trop mais chez moi ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while (($buffer = fgets($fp, 4096)) !== false)
    c'est pas trop une condition valable. à la rigueur un while (!feof($fp)) et affiche le contenu de ton buffer pour voir si c'est bien ça qui pêche?
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut pas la meilleurs mais pas trouvé mieux
    j'ai déjà utilisé ca comme base, et c'est d'ailleurs celle qui m'a permis de comprendre les socket en php

    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
    60
    61
    62
    63
    64
    65
    66
    67
     <?php
     $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); //Création de la ressource socket
     
        //A partir d'ici petite difference
     
        //On bind la socket sur l'ip et le port, qui va permetre d'ecouter la socket
    	socket_bind($socket,"127.0.0.1","8089"); //On attribut une ressource de connexion à la socket (Va permetre à un client de se connecter à celui-ci)
         socket_listen($socket); //On ecoute la socket pour de nouvelles connexion
     
     
        //Quelque variable de sauvegardes
        $sockets = array(); //liste de touts les sockets
        $clients = array($socket); //Liste de touts les clients
        $client = null; //Contiendra la socket actuelle du client
     
     
            while(true)
            {
                //on stocke le tableau $clients dans la variable sockets de type array
                 $sockets = $clients;
     
                            /* Ici on selectionne les sockets connecté, lorsque la condition est passé
                                cela veut dire que aucune socket n'est occupé*/
     
                            if (socket_select($sockets, $write = NULL, $except = NULL, 0) < 1)
                                        continue;
     
     
     
                          //Si un nouveau client est ici
     
                            if (in_array($socket, $sockets)) 
                            {
                                //On l'accept et on sauvegarde sa socket dans $clients et $client
                                $clients[] = $client = socket_accept($socket);
     
     
     
     
                                //On supprime le contenu de $sockets (qui est une variable de stockage du socket temporaire) si le socket actuelle est dans l'array
                                $key = array_search($socket, $sockets);
                                unset($sockets[$key]);
     
                            }//end if
     
     
                    foreach($sockets as $my_socket)
                    {    
                        $read = socket_read($my_socket,1000000);
     
            //Si un des clients ne reçois pas les méssages, alors on le supprime de la liste et on envoie un message général
                            if($read==false)
                            {
     
                                 $key = array_search($socket, $clients);
     
     
                                     unset($clients[$key]);
     
                                    socket_write($my_socket,"Client disconnected");
                            }
            }
     
     
    socket_close($socket);
     
    ?>
    en espérant bien sur que cela te soit utile...

    tu as aussi le fait que pour certains clients, tu soit obligé d'envoyer un minimum de caractère, sinon, la réponse passe pas, du coup, rien ne t’empêche de lancer une réponse qui contient le id de la transaction suivi de 200 espaces et un retour puis de la véritable réponse.
    Conception / Dev

Discussions similaires

  1. Erreur de sockets avec PHP
    Par vince-29 dans le forum Langage
    Réponses: 4
    Dernier message: 20/01/2010, 18h32
  2. Erreur de socket avec le composant Indy idHTTP
    Par Etanne dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/10/2004, 11h27
  3. Travailler avec PHP / Apache / MySQL
    Par R3iTt0R dans le forum Linux
    Réponses: 22
    Dernier message: 24/06/2004, 11h03
  4. [débutant] choix de postgre avec php / migration
    Par bilbon.S dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 23/03/2004, 14h05
  5. Création d'utilisateur sous PostgreSQL 7.3.2 avec PHP
    Par duongkhang dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 06/06/2003, 13h10

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