serveurs de sockets en java,perl,php,c++
Accueil L'offre Tarifs YSServer Tutoriaux Support Espace client Forum Legal
serveurs de sockets en java,perl,php,c++
Testeur de ping en flash
your-socket
Bienvenue, Invité. Veuillez vous connecter ou vous enregistrer.
Avez-vous perdu votre courriel d'activation?Bienvenue.
Septembre 04, 2010, 10:38:41

Connexion avec identifiant, mot de passe et durée de la session
Recherche:     Recherche +
Lancement du YSServer
1150 Messages dans 138 Sujets par 9690 Membres
Dernier membre: semiaddict
* Accueil Aide Recherche Identifiez-vous Enregistrez-vous
+  your-socket
|-+  Tutoriaux
| |-+  Niveau 2
| | |-+  Testeur de ping en flash
« sujet précédent | | sujet suivant »
Pages: [1] Imprimer
Auteur Sujet: Testeur de ping en flash  (Lu 3904 fois)
seal3
Administrator
Hero Member
*****
Messages: 504


Voir le profil
Testeur de ping en flash
« le: Août 22, 2005, 12:34:09 »

Dans ce tutorial, nous allons créer une application permettant de calculer le ping entre votre client et le serveur de socket  distant.

Dans un premier temps, nous allons nous occuper de la partie serveur toujours basée sur le serveur de ce tutorial. Nos explications seront en php puisque il s'agit du langage le plus rependu.

L'équivalent en perl est aussi disponible au bas de cette page. Globalement, le perl et le php sont assez proches pour pouvoir passer de l'un a l'autre facilement.

Voici donc la base de notre serveur :

Code:
<?php
$mainsock
= socket_create(AF_INET, SOCK_STREAM, 0);
socket_set_option($mainsock, SOL_SOCKET,SO_REUSEADDR, 1);
socket_bind($mainsock, "127.0.0.1", 22222) or die('Could not bind to address');
socket_listen($mainsock);
///////////////////

$clients=Array();
$compteur=0;
echo(
"En attente d'un client !\n");

while(
true){
$toread=Array();
array_push($toread,$mainsock);
for ($i=0;$i<count($clients);$i++){ // pour tous les clients
array_push($toread,$clients[$i]["SOCKET"]);
}

socket_select($toread,$a=null,$a=null,$a=null);

if(in_array($mainsock, $toread)){// le mainsock est dans le tableau $toread.
// c'est notre mainsock donc un nouveau client
$sock=socket_accept($mainsock);
echo("Arrivée d'un nouveau client !\n");
$compteur++;
$nb=count($clients);
$clients[$nb]["SOCKET"]=$sock;
$clients[$nb]["UID"]=$compteur;
}else{
// c'est un client qui dit quelque chose
for ($i=0;$i<count($clients);$i++){ // on cherche le client
if(in_array($clients[$i]["SOCKET"], $toread)) { // celui la est dans le tableau toread
$input = socket_read($clients[$i]["SOCKET"], 1024);
if($input==null){
/// deconnection du client !
for ($j=0;$j<count($clients);$j++){ // on le cherche dans le tableau
if($clients[$j]==$clients[$i]){ // trouvé
echo("Deconnection du client ".$clients[$j]["UID"]."\n");
array_splice($clients,$j,1); // on le retire du tableau
$i--;
}
}
}else{
//////////////////////////////////////////////////Message d'un client



//////////////////////////////////////////////////
}
}
}
}
}
php?>



Dans le code ci-dessus nous avons mis en évidence (séparé par des ////) la zone dans laquelle nous allons travailler. Ce serveur se contentera de renvoyer le message à son destinataire. Nous utiliserons la fonction socket_write() comme suit :

Code:
socket_write($clients[$i]["SOCKET"],$input);

A ce stade le serveur est prêt. Nous allons maintenant nous occuper du client flash. Pour faire simple, nous utiliserons une seule image clé qui contiendra le code et affichera notre interface. Pour tester le ping, il faut donc envoyer un message au serveur et mesurer combien de temps s'écoule jusqu'à la réception de ce même message depuis le serveur. Nous allons reprendre le code de ce tutorial :

Code:
var socket = new XMLSocket()
socket.connect("127.0.0.1", 22222)
socket.onConnect = function(success){
}
socket.onData=function(msg){
}


Nous allons indiquer dans le onConnect() si la connection s'est bien effectuée ou non :

Code:
socket.onConnect = function(success){
if(success){
txt_info.text="Connecté sur le port 22222 !"
}else{
txt_info.text="Impossible de se connecter au port 22222 !";
}
}

De la même façon, nous allons alerter l'internaute si la connection est perdue :

Code:
socket.onClose = function(){
txt_info.text="Connection perdue !"
}


Nous allons gérer l'envoie du message vers le serveur avec le bouton bt_send :

Code:
bt_send.onRelease = function(){
socket.send(txt_message.text);
}

A ce moment il nous faut mémoriser depuis combien de temps le swf est lancé. On obtiens ce temps en millisecondes avec la fonction getTimer() de flash. Nous allons donc déclarer une variable pour mémoriser ce temps et la mettre à jour à chaque click du bouton :


Code:
var timer=0
bt_send.onRelease = function(){
timer=getTimer();
socket.send(txt_message.text);
}

Nous attendons la réponse du serveur. Quand la réponse arrive, on calcule le temps qui s'est écoulé et on l'affiche dans le champs de texte txt_result.

Code:
socket.onData=function(msg){
txt_result.text="Ping : "+(getTimer()-time)+" ms"
}


Et voila :-)

Au final, le code sur la première clé ressemble à ceci :

Code:
var timer=0
var socket = new XMLSocket()
socket.connect("127.0.0.1", 22222)
socket.onConnect = function(success){
if(success){
txt_info.text="Connecté sur le port 22222 !"
}else{
txt_info.text="Impossible de se connecter au port 22222 !";
}
}
socket.onClose = function(){
txt_info.text="Connection perdue !"
}
bt_send.onRelease = function(){
timer=getTimer();
socket.send(txt_message.text);
}
socket.onData=function(msg){
txt_result.text="Ping : "+(getTimer()-timer)+" ms"
}

Notez qu'en local, votre ping ne signifie pas grand chose et sera entre 0 et 2 ms. Personnellement, j'obtiens en ligne un ping de 40 ms avec ma freebox. Vous remarquerez aussi que si vous chargez énormément le champ de texte, votre ping sera plus lent. C'est normal puisque le message étant plus long, il met plus de temps à passer entre votre ordinateur et le serveur. On vois bien ici qu'il ne faut pas confondre entre ping et débit.

Vous pouvez télécharger le fla (ping.fla).


* ping.fla (41.5 KB - Téléchargé 462 fois.)
* serveur_php4.php (1.68 KB - Téléchargé 419 fois.)
* serveur_perl.pl (1.24 KB - Téléchargé 382 fois.)
« Dernière édition: Novembre 14, 2005, 11:58:21 par seal3 » Journalisée

Ma signature utilise un compte your-socket afin de dessiner/chatter en temps réel. Etant aussi sur media-box vous y trouverez aussi leurs membres Smiley.
<a href="http://ystutori.your-socket.com/mediabox/dessin.swf" target="_blank">http://ystutori.your-socket.com/mediabox/dessin.swf</a>
seal3
Administrator
Hero Member
*****
Messages: 504


Voir le profil
Re: Testeur de ping par sockets
« Répondre #1 le: Novembre 14, 2005, 11:57:55 »

YSServer v1.0

Nous allons réécrire la partie serveur en réalisant une application pour YSServer v1.0. Pour plus d'informations sur YSServer cliquez ici.

Notre application doit se contenter de renvoyer à tous le monde le message que nous recevons. Le code de l'application est alors très simple :

Code:
<?php
function onClientMessage($uid,$msg){
sendMessage($msg,"");
}
?>


Et oui, c'est tout  Shocked

Vous trouverez les applications au format PHP et PERL en bas de la page.

* ping.php (0.07 KB - Téléchargé 349 fois.)
* ping.pl (0.07 KB - Téléchargé 334 fois.)
« Dernière édition: Novembre 14, 2005, 11:59:59 par seal3 » Journalisée

Ma signature utilise un compte your-socket afin de dessiner/chatter en temps réel. Etant aussi sur media-box vous y trouverez aussi leurs membres Smiley.
<a href="http://ystutori.your-socket.com/mediabox/dessin.swf" target="_blank">http://ystutori.your-socket.com/mediabox/dessin.swf</a>
Pages: [1] Imprimer 
« sujet précédent | | sujet suivant »
Aller à:  

Propulsé par MySQL Propulsé par PHP your-socket | Propulsé par SMF 1.0.5.
© 2001-2004, Lewis Media. Tous droits réservés.
XHTML 1.0 Transitionnel valide! CSS valide!

serveurs de sockets en java,perl,php,c++
serveurs de sockets en java,perl,php,c++