Modérateur PHPfrance |
2575 Messages
23 mai 2006, 11:57
Voici ma solution détaillée :
Un programme d'envoi de données et un serveur de test qui les reçoit et les enregistre dans un fichier "reception.txt"
Envoi.php
<?php
//Envoi au transporteur n°1
echo nl2br(transmettre(1));
//Envoi au transporteur n°2
echo nl2br(transmettre(2));
//Envoi à tous les transporteurs
echo nl2br(transmettre());
//Fonction de transmission
function transmettre($transporteur=0)
{
//paramètres du serveur de destination
$adresse = "127.0.0.1";
$service_port = 8000;
$date = date("d/m/Y");
$rapport = "Transmission de données à $adresse:$service_port (le $date)\r\n";
//Création du socket de communication TCP
$socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//Connexion au serveur de destination via le socket
$conn = @socket_connect($socket, $adresse, $service_port);
if (!$conn) $rapport .= "Connexion non effectuée\r\n";
else {
$rapport .= "Connexion effectuée\r\n";
//Requête SQL : tous les n° de téléphones seront extraits si $transporteur est null
$req = @mysql_db_query("test", "SELECT * FROM `transporteur` WHERE id=$transporteur or $transporteur=0", mysql_connect("localhost", "root", ""));
if (!$req) $rapport .= "Echec de connexion à la base de données!\r\n";
else
//Boucle d'envoi des N° de téléphones 1 par 1
while ($ligne = @mysql_fetch_array($req) )
//envoi du N° lu
if ($ligne){
$resultat = $ligne["id"].";".$ligne["nom"].";".$ligne["Numero de telephone"]."\r\n";
if (@socket_write($socket, $resultat, strlen($resultat)))
$rapport .= "OK pour $resultat\r\n";
else $rapport .= "$resultat n'est pas envoyé\r\n";
}
}
//Fermeture de la socket
$rapport .= "Fin de la transmission.\r\n";
@socket_close($socket);
//Retourner le rapport
return $rapport;
}
?>
Le serveur de test : server.php
<?php
// SERVEUR écoutant sur le port 8000 du hôte 127.0.0.1
// Sert de test pour recevoir des données et les stocker dans un fichier reception.txt
//
// Pour exécuter ce serveur en arrière plan taper : c:\wamp\php\php.exe c:\wamp\www\socket\server.php
//
//Démarrage du serveur écoutant sur le port TCP 8000 de l'ordinateur local
$socket = stream_socket_server("tcp://127.0.0.1:8000", $errno, $errstr);
if (!$socket) {
//Echec
echo "$errstr ($errno)\r\n";
}
else {
//Serveur démarré
$date = date("d/m/Y H:i:s");
$démarrage = "Démarrage le $date ....\r\n";
//Ouvrir le fichier de réception en mode ajout (historique tenu)
$fsortie = fopen ("c:/wamp/www/socket/reception.txt", "a");
//Notification de la date de démarrage
echo "$démarrage";
fputs($fsortie, $démarrage);
//Détection d'un client
while ($conn = stream_socket_accept($socket)) {
//un client est détecté
while (!feof($conn)){
//Lecture des données envoyées par le client
$data = fgets($conn);
if ($data) {
//Notification
echo "Reception: $data";
fputs($fsortie, "$data");
}
}
//Libérer le client en cours
fclose($conn);
}
//Arrêt du serveur : Fermer les ressources
fclose($fsortie);
fclose($socket);
}
?>
Usage :
1. Démarrer d'abord le serveur de test sur le poste local, taper :
c:\wamp\php\php.exe c:\wamp\www\socket\server.php
où :
- php.exe se trouve dans c:\wamp\php
et
server.php dans c:\wamp\www\socket
2. Sur un navigateur, charger la page "Envoi.php" en tapant
: http://localhost/socket/Envoi.php
où : Envoi.php se trouve dans c:\wamp\www\socket
ps: Hé oui, j'utilise wamp 5
--------
//////----
//---
//----
//////
-------
//---
//----
//---
//----
//---
//
------
//////----
//////-----
//////
-----
||--------
||--
||---
||
Prendre le recul n'est pas une perte de temps.
ps:
Affrontez moi dans l'arène