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";