Bonjour/bonsoir,

Etant actuellement entrain de développer un système faisant appel à des trackers GPS, je me retrouve confronté à une technologie que je n'ai jamais eu l'occasion d'étudier. Petit à petit, j'avance, mais je suis arrivé à un niveau où je bloque. Je vais essayer d'être le plus clair possible en détaillant étape par étape le processus suivi jusqu'à présent.

1/ Les trackers GPS ont bien été configuré pour envoyer leurs données vers mon serveur sur le port 8050 via le protocole TCP/IP.

2/ J'ai ensuite ouvert le port 8050 de mon serveur (serveur Linux hébergé chez OVH).

3/ Via la commande suivante, j'ai écouté le port 8050 de mon serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
tcpdump -i eth0 -vvvvtttAXns 1500 ‘port 8050'
Se sont affichées alors à l'écran toutes sortes d'informations qui en gros m'ont prouvé que les trackers envoyaient bien des données. Mon objectif, récupérer ces données via PHP et, à terme, les stocker dans une base de données MySQL.

4/ J'ai donc téléchargé le classe SocketServer.class.php disponible ici : http://www.phpclasses.org/browse/file/31975.html

5/ J'ai ensuite trouvé grâce à mon ami Google un script qui permet d'écouter en permanence le port 8050 de mon serveur :
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
$server = new SocketServer("192.168.1.6",31337); // Create a Server binding to the given ip address and listen to port 31337 for connections
$server->max_clients = 10; // Allow no more than 10 people to connect at a time
$server->hook("CONNECT","handle_connect"); // Run handle_connect every time someone connects
$server->hook("INPUT","handle_input"); // Run handle_input whenever text is sent to the server
$server->infinite_loop(); // Run Server Code Until Process is terminated.
 
 
function handle_connect(&$server,&$client,$input)
{
    SocketServer::socket_write_smart($client->socket,"String? ","");
}
function handle_input(&$server,&$client,$input)
{
    // You probably want to sanitize your inputs here
    $trim = trim($input); // Trim the input, Remove Line Endings and Extra Whitespace.
 
    if(strtolower($trim) == "quit") // User Wants to quit the server
    {
        SocketServer::socket_write_smart($client->socket,"Oh... Goodbye..."); // Give the user a sad goodbye message, meany!
        $server->disconnect($client->server_clients_index); // Disconnect this client.
        return; // Ends the function
    }
 
    $output = strrev($trim); // Reverse the String
 
    SocketServer::socket_write_smart($client->socket,$output); // Send the Client back the String
    SocketServer::socket_write_smart($client->socket,"String? ",""); // Request Another String
}
6/ C'est avec joie que j'arrive enfin à voir les données envoyées par les trackers. Le problème est que, dans un premier temps, le tracker envoie comme information son numéro de série. Pour recevoir les données de géolocalisation complète, il faut renvoyer au tracker un signal indiquant que le serveur accepte de recevoir les données. Voilà ce que dit la documentation des trackers :
If yes server replies 01 if not 00. That confirmation should be sent as binary packet.
7/ J'ai donc essayé de différentes manières d'envoyer '01' au tracker pour qu'il m'envoie la suite des données. En vain.
Par exemple, dans les fonctions handle_connect et handle_input décrites ci-dessus, j'ai tenté d'ajouter ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
socket_send($client->socket, '01', 2, MSG_EOF);
Ou ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SocketServer::socket_write_smart($client->socket,"01","");
Mais rien à faire, les trackers continuent perpétuellement à m'envoyer leur numéro de série.

Toute aide est la bienvenue, parce que là, je commence à bloquer

D'avance merci à ceux qui me liront et proposeront des solutions.