IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

mesure de débit


Sujet :

Réseau C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut mesure de débit
    Bonjour,
    Voilà je réalise une application en c avec laquelle je doit mesurer des débits. Je souhaite faire quelque chose qui resemble un peu au débit que l'on voit dans emule ou un client torrent comme azureus. J'aimerai savoir comment cela marche et qu'elle est le principe de fonctionnement de ces débits.

    J'ai essayer pour ma part de faire ceci pour vous expliquer un peu le principe:
    1° capture de temp
    nRead = receive de mon socket
    2° capture de temp
    mon débit est égale à = nRead / (2° - 1°)

    Le problème avec c'est façon de faire dépend de la résolution de la fonction qui capture le temp. Il m'arrive tout le temps d'avoir (2°-1°) = 0 car je reçoit tres peu de données. C'est pourquoi j'aimerai savoir comment fait la mule ou autre pour donner un débit moyen et/ou instantanée.

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier Avatar de psyphi
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2006
    Messages : 119
    Points : 120
    Points
    120
    Par défaut
    Moi je verrais le truc comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Server         Client
    ------         ------
                    initialize sizeToSend
    :1             time1
    wait          send file
    recv file     wait
    end recv    wait
    send ok     time2
    goto 1       speed = sizeSend / (time2 - time1)
    Ensuite la moyenne pourrait etre calculé comme suit: (calcul peut précis)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(mean == 0)
            mean = speed;
    else{
            mean += speed;
            mean /= 2;
    }
    Pour calculer la vitesse moyenne, ce serait peut etre plus réaliste de mettre en mémoire plusieurs vitesses par exemple 10 et ensuite de faire leur moyenne.

    De plus pour avoir une vitesse réaliste il faut envoyer de gros fichier, il faudrait faire varier leur taille entre 100kB et 1MB.
    Mon blog: http://blog.bores.fr
    Mon wiki: http://bores.fr/wiki
    Mes programmes libres: https://github.com/tbores

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    oulala oulala 100kB à 1MB, je ne peut pas générer autant de données. Les trames que j'envoie font a tout cassé 20 à grand maxi 30 octets. De plus je souhaite pouvoir avoir un débit d'un flux de donnée en temp réel. De plus si je vous dit que je fait des mesures depuis un module GPRS (c'est à dire que l'on paye au volume de données 5Mo = 5 euro), on a vite fait de changer de carte sim.

    N'y a t'il pas un autre moyen de procéder pour faire ces mesures? Merci.

  4. #4
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    20 ou 30 octets ? On est pas du tout dans les memes cas d'utilisation que ceux que tu cites alors.

    Tu as vu ce que te font les programmes que tu cites au depart (les premieres secondes, voir la premiere minute) ? Ou meme ton navigateur quand tu demarres un telechargement ? Ils t'indiquent des valeurs fantaisistes qui peu a peu convergent vers la valeur reelle. Et pourtant ils fonctionnent sur des lignes 56K, 512K voir plus, donc en quelques secondes ils ont envoyés bien plus que 20 ou 30 octets !

    Franchement j'ai du mal a voir comment tu veux calculer un débit avec des messages de 20 ou 30 octets...J'ignore la vitesse d'un lien GPRS mais c'est surement bien plus rapide que 20B/s (impossible de faire de la communication vocale en 20B/s) donc le temps que tu demarres ta mesure, c'est quasiment deja fini.

    Quelle est l'utilité de cette mesure ? Peut etre y a t il un autre moyen de faire ce que tu souhaites

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    Le but de mon programme est plutôt simple, j'ai une trame de données 20 à 30 octets (dedans il y a divers paramètre provenant d'un bus CAN ). J'envoie de manière répété cette trame au travers de socket pour avoir un flux de donnée en temps réel. Et je cherche a avoir le débit de ce flux de données. Comme je travail avec du GRPS, connaître le débit est important suivant ou se trouve le module GPRS.

    voici un peu le principe de mon débit :
    do
    1° capture ma trame
    2° je l'envoie
    while (tant que j'ai pas dit stop)

    et c'est à la réception que je veut pouvoir avoir le débit réel et/ou moyen

    En tout cas merci de votre aide

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    eh ben dans ton message envoyé tu ajoutes le timestamp d'envoi....

    Tu as donc 2 parties dans ton message :

    timestamp
    trame

    quand tu lis, tu décodes, et tu fais la différence avec le timestamp d'envoi..

    Mais vu la granularité du temps et la vitesse des réseaux et la petite taille de tes paquets, ça va t'obliger à coder un timestamp au moins à la milliseconde, mais plus vraisemblablement à la microseconde...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    avec un timestamp je peut descendre à la milliseconde voir à la microseconde
    Dans quelle librairie je peut trouver se timestamp?

    J'ai cherché mais je ne trouve pas de timestamp.c ou timestamp.h dans mon dossier include (ou ailleur), de plus la cible que je programme a un processeur arm. J'ai des librairies bien spécifique à utiliser.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    le timestamp c'est le nom anglais pour dire "marqueur de temps".

    Je ne pense pas qu'il y ait de fonction toute faite.

    Ce que je voulait dire c'est :

    • Tu calcules ton temps exact (il y a diverses méthodes. Dans la FAQ, dans les sources (il y a une méthode que j'ai mise dans les sources, à la micoseconde)).
    • Tu le formattes et l'inclue dans le message.
    • Tu le décodes de l'autre côté
    • Tu calcules de l'autre côté avec la même fonction le temps.
    • Tu fais la différence.
    • Connaissant le volume (la longueur du message) tu calcules le débit.
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    J'ai trouvé sur le site ici même permettant d'avoir un temps avec un résolution de 0.1ms sur 8 octets et je compte faire comme tu me la dit :
    Merci de votre aide .

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <stdlib.h>
     
     
    #include <time.h> 
    #include <sys/time.h>
    #ifdef __linux
    #include <unistd.h>
    #endif
     
     
    /* 
     * Recuperateur de temps :
     */
    double GetClock ( void )
    {
      double d=-1.0 ;
     
     
    #ifndef __linux 
    #ifdef _WIN32
       struct timeval tval ;
       struct timezone *tz=(struct timezone *)NULL ; 
     
       timerclear(&tval);
     
       if ( gettimeofday(&tval, tz) )
       { 
    #ifdef VERBOSE
          fprintf (stderr, "\nCLOCK ERROR !!!\n");
    #endif
       } 
       else
       { 
          d = ((double)(tval.tv_usec)/1000000.0) ;
          d = (double) tval.tv_sec + d ;
       } 
    #else
       struct timespec cur_time, res ;
     
       if (clock_gettime(CLOCK_REALTIME, &cur_time))
       {
    #ifdef VERBOSE
          fprintf (stderr, "\nCLOCK ERROR !!!\n");
    #endif
       }
       else 
       {
          d = ((double)(cur_time.tv_nsec)/1000.0) / 1000000.0 ;
          d = (double) cur_time.tv_sec + d ;
       }
    #endif
    #else 
       struct timeval tval ;
       struct timezone *tz=(struct timezone *)NULL ;
     
       timerclear(&tval); 
     
       if ( gettimeofday(&tval, tz) )
       {
    #ifdef VERBOSE
          fprintf (stderr, "\nCLOCK ERROR !!!\n");
    #endif 
       }
       else
       {
          d = ((double)(tval.tv_usec)/1000000.0) ;
          d = (double) tval.tv_sec + d ;
       }
    #endif 
     
       return d ;
    }
     
     
    /*
     * Programme de test:
     */ 
    int main( void )
    {
       int i ;
       double   t_depart, t_fin, t ;
       double   duree_en_millisecondes ; /* 1000 pour une seconde, 3600000 pour une heure */
     
     
       /* Calcul temps de depart */
       t_depart = GetClock() ; 
    	printf("t_depart = %d\n",t_depart);
       t = 0.0 ;
     
       for ( i = 0 ; i < 1 ; i++ )
          t = t + 1.0 ;
     
       t_fin = GetClock() ;
     
     
       if ( (t_depart*t_fin) < 0.0 )
          fprintf ( stderr, "\n ATTENTION !!! Une erreur s'est produite\n"); 
       else
          fprintf ( stderr, "\n Temps écoulé %g secondes pour une boucle 1 : \n",(t_fin - t_depart));
     
       t_depart = t_fin ;
     
       t = 0.0 ;
     
       for ( i = 0 ; i < 5000 ; i++ )
          t = t + 1.0 ;
     
       t_fin= GetClock() ;
     
       if ( (t_depart*t_fin) < 0.0 )
          fprintf ( stderr, "\n ATTENTION !!! Une erreur s'est produite\n");
       else
          fprintf ( stderr, "\n Temps écoulé %g secondes pour une boucle 10 : \n",(t_fin - t_depart));
     
    	t_depart = GetClock() ; 
    	//printf("t_depart = %f\n",t_depart);
    	t_fin = GetClock() ;
    	//printf("t_fin = %f\n",t_fin);
    	fprintf ( stderr, "\n Résolution maximum %f secondes  : \n",(t_fin - t_depart));
     
     
     
       return EXIT_SUCCESS ;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [winpcap] probleme de mesure de débit
    Par boboss123 dans le forum Réseau
    Réponses: 0
    Dernier message: 14/06/2012, 17h30
  2. [Web/Reseaux] Mesure du Débit Internet
    Par Pasqualini dans le forum C++Builder
    Réponses: 7
    Dernier message: 05/12/2011, 18h46
  3. mesurer le Débit d'une connexion avec EJB
    Par EJB_Problem dans le forum Java EE
    Réponses: 0
    Dernier message: 12/04/2011, 17h00
  4. [mrtg] mesure du débit en temps réel
    Par nuxia dans le forum Réseau
    Réponses: 1
    Dernier message: 25/03/2008, 09h58
  5. applet qui mesure le débit
    Par mdlleréseau dans le forum Applets
    Réponses: 1
    Dernier message: 12/02/2008, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo