Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1171 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Socket: Mesure d'upload et dowload [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Socket: Mesure d'upload et dowload [RESOLU]

n°1189166
bartleby
Posté le 01-09-2005 à 06:36:16  profilanswer
 

Salut a tous,
 
J'ai un probleme avec une mesure de vitesse d'upload et dowload. Je voulais tester les performances des sockets java, et j'ai ecris un petit programme....qui me donne des resultats evidemment erronés.
 
Un client interroge un serveur de newsGroup, envoye des requetes pour des articles a la chaine: je mesure la vitesse d'envoi des requetes. Un thread ecoute sur le meme socket ce qui arrive: je mesure la quantite d'info recu.
 
Voici ce que j'ai a l'ecran..
 

Code :
  1. Downloading at :162 ko/s.
  2. Uploading at :30 ko/s.
  3. Downloading at :160 ko/s.
  4. Uploading at :20 ko/s.
  5. Downloading at :164 ko/s.
  6. Uploading at :12 ko/s.
  7. Downloading at :180 ko/s.
  8. Uploading at :20 ko/s.
  9. Downloading at :225 ko/s.
  10. Uploading at :19 ko/s.


 
Formidable, mais ma connection est la suivante:  3.0 Mbps download and 384 Kbps upload. ( Rogers express Canada) et je devrais avoir au max dowload=375 ko/s et 48 ko/s en upload.
 
Voici mes algo:
 
Upload:

Code :
  1. String toSend = "NEXT\n";
  2. int totaltSentBytes = 0;  // Total de byte envoye depuis la derniere mesure.
  3. int bytesSent = toSend.getBytes().length ; // Octets seront envoyes a chaque iteration   
  4. long t0 = System.currentTimeMillis(); // On initialise t0 a "maintenant"
  5. // Grosso modo, il y a 700 000 messages a rapatrier (c'est un newsGroup )
  6. for (int cursor = this.olderMessageId ; cursor <= this.latestMessageID ; cursor++)
  7. {
  8. this.conn.getOut().write(toSend); // Ecriture dans le socket avec un PrintWriter
  9. totaltSentBytes += bytesSent;     // "Mise a jour du compteur"
  10. if ((System.currentTimeMillis() - t0) > 5000) //mesure toutes les 5 secondes
  11. {
  12.  System.out.println("Uploading at :"+totaltSentBytes/1024/((System.currentTimeMillis() - t0)/1000)+" ko/s." );
  13.  totaltSentBytes = 0;
  14.  t0 = System.currentTimeMillis();
  15. }
  16. }


 
Download:

Code :
  1. int bytesRead = 0;
  2. long t0 = System.currentTimeMillis();
  3. while (true){
  4.  in.read();
  5.  bytesRead += 8;
  6.  if ((System.currentTimeMillis() - t0) >5000)
  7.  {
  8.   System.out.println("Downloading at :"+bytesRead/1024/((System.currentTimeMillis() - t0)/1000)+" ko/s." );
  9.   bytesRead = 0;
  10.   t0 = System.currentTimeMillis();
  11.  }
  12. }


 
Comment se fait-il que j'upload et download quasiement a 50% de ce que mon provider permet ?
(Je precise que si j'utilise un client commercial genre Newsbin, l'upload et le download se font aux limites de mon FAI).
 
Je ne dispose pas de plusieurs ordinateurs, certains ont-ils fait ce genre de test sur un LAN ?
Ou alors il y a quelques chose que j'ai mal compris ?
 
PS: Je n'utilise pas d'anti-virus et ma machine tourne sous XP Pro....


Message édité par bartleby le 06-09-2005 à 18:00:09
mood
Publicité
Posté le 01-09-2005 à 06:36:16  profilanswer
 

n°1189231
Profil sup​primé
Posté le 01-09-2005 à 10:11:19  answer
 

Les taux de transfert dépendent ( en partie ) de la machine à laquelle tu te connectes à distance ( serveur ), essaie sur un autre serveur et donne nous tes résultats.
En effet si la machine distante est sollicitée par un million de clients, la connexion de cette machine sera divisée par un million ( en gros ) et donc de ton côté ( client ) tu auras des résultats plus que médiocres.
Cela m'intérresse également, mais j'avoue que je ne m'y suis jamais réellement mis sérieuseument.
 

n°1189649
bartleby
Posté le 01-09-2005 à 16:39:52  profilanswer
 

Non, ce n'est pas le probleme.
 
Si je teste juste apres avec NewsBin, les debits sont bien ceux attendus.
 
Le probleme vient:
 
- Soit de ma facon d'envoyer les donnees.
- Soit de ma facon de mesure la vitesse.

n°1192999
cooltwan
Posté le 06-09-2005 à 09:14:29  profilanswer
 

tente en C ^^

n°1193011
Taz
bisounours-codeur
Posté le 06-09-2005 à 09:31:27  profilanswer
 

bien pour les unités ! Vive le SI
1 ko = 1000o
1 kio = 1024o
 
 
 
 
# this.conn.getOut().write(toSend); // Ecriture dans le socket avec un PrintWriter
#     totaltSentBytes += bytesSent;    // "Mise a jour du compteur"
 
 
t'as sans doute moyen de faire tout ça en async

n°1193433
bartleby
Posté le 06-09-2005 à 18:03:17  profilanswer
 

Bon, le probleme est resolu:
 
Il est beaucoup plus rapide de lire lorsqu'on le fait dans un buffer. Donc on peut remplacer la ligne suivante:
 
in.read();
 
par
 
byte[] buffer = new byte[5040];
in.read(buffer);  
 
En procedant de la sorte, je download a 300 ko/s sans probleme.
 
Utiliser la command XOVER  au lieu de NEXT pour rapatrier les articles a pas mal aide aussi D: !


Message édité par bartleby le 06-09-2005 à 18:04:06

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Socket: Mesure d'upload et dowload [RESOLU]

 

Sujets relatifs
problème de session avec Easyphp [RESOLU]upload fichier
[ RESOLU ] Des bordures transparentes ?(résolu)probleme dans mes codes css et xhtml
[Resolu]creer plusieurs graph a partir du meme tableau excel?[Résolu] Comment réduire les interlignes en css ?
[RESOLU] Sessions - Quand variable vide[RESOLU]XML-Actionscript le retour
[RESOLU]Problème clips dynamiques et assignation...[Résolu]Batch et raccourci clavier
Plus de sujets relatifs à : Socket: Mesure d'upload et dowload [RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR