Bonjour, je suis en train de développer une application de mesure de qualité de service internet, donc je cherche à écrire un petit programme qui calcule le débit de ma connexion!
Si quelqu'un sait comment faire, ou a déjà écrit un tel programme merci d'avance
j'ai essayé d'utiliser se code mais les résultats que je me tiens restent toujours "0.0" est ce que vous pouvez m'aider pour trouver une solution
merci
public DataMonitor() {
samples = new Vector();
epoch = new Date();
}
// Add a sample with a start and finish time.
public void addSample(long bcount, Date ts, Date tf) {
samples.addElement(new DataSample(bcount, ts, tf));
}
// Get the data rate of a given sample.
public float getRateFor(int sidx) {
float rate = (float) 0.0;
int scnt = samples.size();
if (scnt > sidx && sidx >= 0) {
DataSample s = (DataSample) samples.elementAt(sidx);
Date start = s.start;
Date end = s.end;
if (start == null && sidx >= 1) {
DataSample prev = (DataSample) samples.elementAt(sidx - 1);
start = prev.end;
}
if (start != null && end != null) {
long msec = end.getTime() - start.getTime();
rate = 1000 * (float)s.byteCount / (float)msec;
}
}
return rate;
}
// Get the rate of the last sample
public float getLastRate() {
int scnt = samples.size();
return getRateFor(scnt - 1);
}
// Get the average rate over all samples.
public float getAverageRate() {
long msCount = 0;
long byteCount = 0;
Date start;
Date finish;
int scnt = samples.size();
for (int i = 0; i < scnt; i++) {
DataSample ds = (DataSample)samples.elementAt(i);
if (ds.start != null)
start = ds.start;
else if (i > 0) {
DataSample prev = (DataSample)samples.elementAt(i-1);
start = ds.end;
}
else
start = epoch;
if (ds.end != null)
finish = ds.end;
else if (i < scnt - 1) {
DataSample next = (DataSample)samples.elementAt(i+1);
finish = ds.start;
}
else
finish = new Date();
// Only include this sample if we could figure out a start
// and finish time for it.
if (start != null && finish != null) {
byteCount += ds.byteCount;
msCount += finish.getTime() - start.getTime();
}
}
float rate = -1;
if (msCount > 0) {
rate = 1000 * (float)byteCount / (float)msCount;
}
System.out.println(rate);
return rate;
}
public static void main (String []args){
DataMonitor d =new DataMonitor();
System.out.println(d.getLastRate());
}
}
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111
>
Hamzaoui
13 avril 2016 à 14:29
Salut,
Si tu utilises le code que tu as posté c'est normale... tu n'y ajoutes pas de samples...
Hamzaoui
>
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023 14 avril 2016 à 10:49
bonjour , j'ai essayé d'ajouter une class DataSample et le résultat reste le même
import java.util.Vector; import java.util.Date; import java.util.Enumeration; public class DataSample { long byteCount; Date start; Date end;
DataSample(long bc, Date ts, Date tf) { byteCount = bc; start = ts; end = tf; }
}
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111
>
Hamzaoui
14 avril 2016 à 11:18
Salut,
Pour le coup, tu peux ajouter toutes les classes que tu veux, mais si avant l'appel de la méthode getLastRate tu n'ajoutes pas de sample (voir méthode addSample), le résultat sera TOUJOURS le même.
salut,
moi aussi j'ai un difficulté pour développer une application de calcule de débit internet :( s'il vous plait si tu arrive à une solution pouvez vous le m'envoyé et merci d'avance
13 avril 2016 à 14:23
merci
import java.util.Vector;
import java.util.Date;
import java.util.Enumeration;
/**
*
public class DataMonitor {
protected Vector samples;
protected Date epoch;
public DataMonitor() {
samples = new Vector();
epoch = new Date();
}
// Add a sample with a start and finish time.
public void addSample(long bcount, Date ts, Date tf) {
samples.addElement(new DataSample(bcount, ts, tf));
}
// Get the data rate of a given sample.
public float getRateFor(int sidx) {
float rate = (float) 0.0;
int scnt = samples.size();
if (scnt > sidx && sidx >= 0) {
DataSample s = (DataSample) samples.elementAt(sidx);
Date start = s.start;
Date end = s.end;
if (start == null && sidx >= 1) {
DataSample prev = (DataSample) samples.elementAt(sidx - 1);
start = prev.end;
}
if (start != null && end != null) {
long msec = end.getTime() - start.getTime();
rate = 1000 * (float)s.byteCount / (float)msec;
}
}
return rate;
}
// Get the rate of the last sample
public float getLastRate() {
int scnt = samples.size();
return getRateFor(scnt - 1);
}
// Get the average rate over all samples.
public float getAverageRate() {
long msCount = 0;
long byteCount = 0;
Date start;
Date finish;
int scnt = samples.size();
for (int i = 0; i < scnt; i++) {
DataSample ds = (DataSample)samples.elementAt(i);
if (ds.start != null)
start = ds.start;
else if (i > 0) {
DataSample prev = (DataSample)samples.elementAt(i-1);
start = ds.end;
}
else
start = epoch;
if (ds.end != null)
finish = ds.end;
else if (i < scnt - 1) {
DataSample next = (DataSample)samples.elementAt(i+1);
finish = ds.start;
}
else
finish = new Date();
// Only include this sample if we could figure out a start
// and finish time for it.
if (start != null && finish != null) {
byteCount += ds.byteCount;
msCount += finish.getTime() - start.getTime();
}
}
float rate = -1;
if (msCount > 0) {
rate = 1000 * (float)byteCount / (float)msCount;
}
System.out.println(rate);
return rate;
}
public static void main (String []args){
DataMonitor d =new DataMonitor();
System.out.println(d.getLastRate());
}
}
13 avril 2016 à 14:29
Si tu utilises le code que tu as posté c'est normale... tu n'y ajoutes pas de samples...
14 avril 2016 à 10:49
14 avril 2016 à 11:18
Pour le coup, tu peux ajouter toutes les classes que tu veux, mais si avant l'appel de la méthode getLastRate tu n'ajoutes pas de sample (voir méthode addSample), le résultat sera TOUJOURS le même.
6 sept. 2019 à 18:56