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 - function pack() - PHP Warning: pack(): Type >: unknown format code in


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Mika2008
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 71
    Points
    71
    Par défaut Socket - function pack() - PHP Warning: pack(): Type >: unknown format code in
    Bonjour,

    je voudrais écrire un programme en php qui vas communiquer en utilisant les sockets à un jeux qui s'appelle MINETEST, en fait ce jeux propose une API permettant de communiquer avec elle :

    http://dev.minetest.net/Network_Protocol

    j'ai donc essayer d'écrire un bout de code pour commencer me permettant de communiquer avec ce programme depuis du code PHP, mais j'ai du mal avec les sockets je pense qu'il y a un truc que j'ai pas bien compris.

    Donc d’après la documentation il faut ouvrir un socket et envoyer la séquence suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    From client's standpoint:
     
        -> TOSERVER_INIT
        <- TOCLIENT_HELLO
        <-> Authentication

    donc voici ce qui je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    $headerMsg =  pack(">IHB",0x4F457403, 0, 0);
    ...
    et la j'ai le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Socket created
    Connection established
    PHP Warning:  pack(): Type >: unknown format code in /var/www/minetest/phpminetest/demo.php on line 32
    Could not send data: [0] Success

    qu'elle erreur j'ai fait sur la function pack svp ?




    le code complet :


    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
    <?php
     
    $minetestServerIp = '192.168.50.21';
    $minetestServerPort = '30000';
     
    $SEQNUM_INITIAL = '0xFFDC';
    $TOCLIENT_HELLO = '0x02';
     
    if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
    {
        $errorcode = socket_last_error();
        $errormsg = socket_strerror($errorcode);
     
        die("Couldn't create socket: [$errorcode] $errormsg \n");
    }
     
    echo "Socket created \n";
     
    if(!socket_connect($sock , $minetestServerIp  , $minetestServerPort))
    {
        $errorcode = socket_last_error();
        $errormsg = socket_strerror($errorcode);
     
        die("Could not connect: [$errorcode] $errormsg \n");
    }
     
    echo "Connection established \n";
     
     
    //header = pack('>IHB', PROTOCOL_ID, self.peer_id, self.channel)
     
    $headerMsg =  pack(">IHB",0x4F457403, 0, 0);
     
     
    $message = $headerMsg;
     
    //Send the message to the server
    if( ! socket_send ( $sock , $message , strlen($message) , 0))
    {
    	$errorcode = socket_last_error();
    	$errormsg = socket_strerror($errorcode);
     
    	die("Could not send data: [$errorcode] $errormsg \n");
    }
     
    echo "Message send successfully \n";
     
     
     
     
    echo "Lecture de la réponse:\n\n";
    $buf = 'Ceci est mon buffer.';
    if (false !== ($bytes = socket_recv($sock, $buf, 2048, MSG_DONTWAIT))) {
    	echo "$bytes octets lus depuis socket_recv(). Fermeture du socket...";
    } else {
    	echo "socket_recv() a échoué; raison: " . socket_strerror(socket_last_error($sock)) . "\n";
    }
    socket_close($sock);
     
    echo $buf . "\n";
    echo "OK.\n\n";

  2. #2
    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
    D'ou te vient ce ">IHB" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier Avatar de Mika2008
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 71
    Points
    71
    Par défaut
    En fait il existe un code écrit en Python ici :

    https://github.com/boppreh/minetesting

    et il utilise cette même function pour discuter avec le jeux :

    ligne 120 du fichier client.py

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     def _send(self, packet):
            """ Sends a raw packet, containing only the protocol header. """
            header = pack('>IHB', PROTOCOL_ID, self.peer_id, self.channel)
            self.sock.sendto(header + packet, self.server)


    je crois que je viens de comprendre mon erreur :

    en python :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    pack('>IHB', PROTOCOL_ID, self.peer_id, self.channel)

    >IHB = Byte order big-endian unsigned short integer 2 unsigned char integer 1
    et la suite ce sont les textes qui sont converti.

Discussions similaires

  1. equivalence fonction pack php en C#
    Par royreal dans le forum C#
    Réponses: 2
    Dernier message: 21/03/2010, 14h14
  2. Réponses: 3
    Dernier message: 12/01/2007, 10h25
  3. Question bete, sur les functions en php
    Par clemsouz dans le forum Langage
    Réponses: 8
    Dernier message: 03/08/2006, 16h10
  4. Réponses: 17
    Dernier message: 02/07/2006, 17h58
  5. Réponses: 1
    Dernier message: 09/06/2006, 17h06

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