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 :

calcul 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 calcul de débit
    Bonjour, je cherche a calculer un debit voici comment je procede.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    time_t start,end;
    double dif;
    char toto[1];
     
    time(&start);
    nRead = temp->Receive(buff,sizeof(buff),0); //nRead est la taille reçuen octet
    time(&end);
    dif=difftime(end,start);
    sprintf(toto,"%d",dif);
    //Ensuite j'affiche toto
    J'ai comme résultat toujours 0 alors que je dervrais avoir la difference qui s'affiche. Il faut savoir que je ne recoit pas beaucoup d'octet a peine entre 20 et 30. J'aimerai savoir quelle est la résolution de la fonction time et pourquoi je n'ai que 0 comme résultat. Merci d'avance à vous tous.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par doommick31
    Bonjour, je cherche a calculer un debit voici comment je procede.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(toto,"%d",dif);
    c'est normal, %d est pour un int et %f ou %g est pour un double

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(toto,"%f",dif);

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par doommick31
    Bonjour, je cherche a calculer un debit voici comment je procede.

    attention, il y a le caractère '\0' à la fin de la chaine !

    est mieux

  4. #4
    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
    Merci de vos réponse j'ai fait les modification mais au lieu d'avoir 0 j'ai 0.000000 sa résout pas mon pb.
    Je saisit pas dou peu provenir l'erreur. Je pense que la résolution de timer et trop grande de l'odre de la seconde. Sa doit etre de la d'ou vient l'erreur.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886

  6. #6
    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 essayer sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    TCHAR buff[127];
    unsigned int nRead;
    double start,end,dif;
    char toto[128];
     
    start=GetClock();
    nRead = temp->Receive(buff,sizeof(buff),0); 
    end=GetClock();
    dif=end-start;
    sprintf(toto,"%f",dif);
    et par malheur sa ne marche pas car il ne connait pas GetClock
    j'ai bien inclus time.h par contre sys/time.h je ne l'ai pas dutou ou d'apres vous puis-je le trouver?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Ah ? là je ne sais pas. Je pense que le fichier sys/time.h doit s'installer automatiquement lorsque tu installes code::blocks ou autre.

    Peux-tu nous montrer tout ton code s'il te plait ?

  8. #8
    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
    tu va rire mais je ne l'ai pas sur mon disque dur le fichier sys/time.h
    voici mon code

    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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
     
    // TCPSocket.cpp : implementation file
    //
     
    #include "stdafx.h"
    #include "server.h"
    #include "TCPSocket.h"
    #include "Asynlstn.h"
    #include "serverDlg.h"
    #include "time.h"
     
    #include <sys/time.h>//a pas trouver 
     
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
     
    /////////////////////////////////////////////////////////////////////////////
    // TCPSocket
     
    TCPSocket::TCPSocket(CDialog* pDlg)
    {
    		m_pDlg = pDlg;
    }
     
     
    TCPSocket::~TCPSocket()
    {
    }
     
     
    // Do not edit the following lines, which are needed by ClassWizard.
    #if 0
    BEGIN_MESSAGE_MAP(TCPSocket, CAsyncSocket)
    	//{{AFX_MSG_MAP(TCPSocket)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    #endif	// 0
     
    /////////////////////////////////////////////////////////////////////////////
    // TCPSocket member functions
     
     
    //Attente ACCEPTATION de connection TCP uniquement
    void TCPSocket::OnAccept(int nErrorCode) 
    {
    	CAsyncSocket::OnAccept(nErrorCode);
    }
     
    //Attente de fermeture de connection
    void TCPSocket::OnClose(int nErrorCode) 
    {
    	CAsyncSocket::OnClose(nErrorCode);
    	delete this;
    }
     
    //Attente de connection
    void TCPSocket::OnConnect(int nErrorCode) 
    {
    	CAsyncSocket::OnConnect(nErrorCode);
    }
     
    //Signale de l'on peut recevoir des donnees 
    void TCPSocket::OnReceive(int nErrorCode) 
    {
    	TCPSocket* temp;
    	temp=((CServerDlg*)m_pDlg)->SocketTCP1;
     
    	TCHAR buff[127];
    	unsigned int nRead;
    	double start,end,dif;
    	char toto[1];
     
    	start=GetClock();
    	nRead = temp->Receive(buff,sizeof(buff),0); 
    	end=GetClock();
    	sprintf(toto,"%f",dif);
     
    	buff[nRead] = 0; //terminate the string
    	CString szTemp(buff);
     
    //*************************************************************************************
    //Morceau de code rajouter pour enregistrer le dans un fichier
     
    		CFile fichier;
    		fichier.Open("reception.dat",CFile::modeCreate |CFile::modeWrite);
    		fichier.Write(szTemp,szTemp.GetLength());
    		fichier.Close();
     
    //*************************************************************************************
     
    	//Affiche dans la fenetre principal
    	//((CServerDlg*)m_pDlg)->m_affiche += "\r\n";
    	//((CServerDlg*)m_pDlg)->m_affiche += buff;
    	//((CServerDlg*)m_pDlg)->UpdateData(FALSE);
     
    	//Affiche dans les CList
    	((CServerDlg*)m_pDlg)->m_val1.InsertString(0,toto);
    	((CServerDlg*)m_pDlg)->m_val2.InsertString(0,&buff[2]);
     
    	((CServerDlg*)m_pDlg)->m_val1.DeleteString(20);
    	((CServerDlg*)m_pDlg)->m_val2.DeleteString(20);
     
    	((CServerDlg*)m_pDlg)->m_val1.RedrawWindow();
    	((CServerDlg*)m_pDlg)->m_val2.RedrawWindow();
    	CAsyncSocket::OnReceive(nErrorCode);
    }
     
    //Signale que l'on peut envoyer
    void TCPSocket::OnSend(int nErrorCode) 
    {
    	CAsyncSocket::OnSend(nErrorCode);
    }
     
    //Reception en TCP
    int TCPSocket::Receive(void* lpBuf, int nBufLen, int nFlags) 
    {
    	return CAsyncSocket::Receive(lpBuf, nBufLen, nFlags);
    }
     
    //Envoie en TCP
    int TCPSocket::Send(const void* lpBuf, int nBufLen, int nFlags) 
    {
    	return CAsyncSocket::Send(lpBuf, nBufLen, nFlags);
    }
     
    //Creation d'un socket TCP
    BOOL TCPSocket::Create( UINT nSocketPort , int nSocketType, long lEvent, LPCTSTR lpszSocketAddress )
    {
    	return CAsyncSocket::Create(nSocketPort,nSocketType,lEvent,lpszSocketAddress);
    }
     
    //Creation d'un socket TCP
    BOOL TCPSocket::Socket( int nSocketType , long lEvent , int nProtocolType , int nAddressFormat )
    {
    	return CAsyncSocket::Socket( nSocketType, lEvent, nProtocolType, nAddressFormat);
    }
     
    //Donne un nom au socket
    BOOL TCPSocket::Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress)
    {
    	return CAsyncSocket::Bind(nSocketPort,lpszSocketAddress);
    }
     
    //Fonction ecoute
    BOOL TCPSocket::Listen( int nConnectionBacklog )
    {
    	return CAsyncSocket::Listen( nConnectionBacklog );
    }
     
    //Ferme la connection
    void TCPSocket::Close()
    {
    	CAsyncSocket::Close();
    }
     
    //Derniere erreur
    int TCPSocket::GetLastError()
    {
    	return CAsyncSocket::GetLastError();
    }
     
    //Obtenir le nom d'un correspondant connecté
    BOOL TCPSocket::GetPeerName( SOCKADDR* lpSockAddr, int* lpSockAddrLen )
    {
    	return CAsyncSocket::GetPeerName( lpSockAddr, lpSockAddrLen);
    }
     
    //Obtenir le nom de la socket indiquée
    BOOL TCPSocket::GetSockName( SOCKADDR* lpSockAddr, int* lpSockAddrLen )
    {
    	return CAsyncSocket::GetSockName( lpSockAddr, lpSockAddrLen );
    }
     
    //Indique qu'un message urgent arrive ???
    void TCPSocket::OnOutOfBandData(int nErrorCode) 
    {
    	CAsyncSocket::OnOutOfBandData(nErrorCode);
    }
    Merci du coup de main

  9. #9
    Membre éprouvé
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Points : 953
    Points
    953
    Par défaut
    Je pense que sys/time.h est réservé aux Unixoïdes

    Sinon pour le code que tu nous montre, on peut rien faire, ici c'est le forum C, pas C++

    Pour ton premier code, as-tu regardé la fonction clock() ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clock_t clock ( void );
    A utiliser avec CLOCKS_PER_SEC.

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par salseropom
    Ah ? là je ne sais pas. Je pense que le fichier sys/time.h
    Pas standard.

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par doommick31
    J'aimerai savoir quelle est la résolution de la fonction time et pourquoi je n'ai que 0 comme résultat. Merci d'avance à vous tous.
    La résolution de time() étant d'une seconde, ça ne fonctionnera pas pour des petites valeurs. Il faut une résolution plus fine mais il n'y a pas de solution standard.

    Unixoide : gettimeofday()
    Windows : GetSystemTime(), GetLocalTime(), SYSTEMTIME (milliseconde)

  12. #12
    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
    Ok merci a tous pour votre aide j'ai trouver la solution parmis celle que vous m'avez proposez
    Jutilise GetTickTime() de windows.h par contre je sais pas comment convertir un DWORD en char * je vait chercher en tout cas merci.

    Bon j'ai trouver un DWORD = unsigned long aussi a preciser la resolution de GetTickTime() est de l'ordre de la millisecond.

    Tout ceci me pause encore se probleme de resolution, je recoit 20 à 30 octets, si ma connection est trop rapide je ne pourrait rien mesurer je vait etre oubliger de faire des moyennes sur 10 trames voir plus.

    Ah moi qu'il exsite dautre fonction qui descende plus bas de l'ordre de la µseconde.

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    Par défaut
    Le plus fin possible sous Windows, c'est QueryPerformanceCounter() (à utiliser avec QueryPerformanceFrequency()).

  14. #14
    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
    il existe pas une fonction dont la resolution est de l'ordre de la µs (micro second)? ou alors une fonction qui convertie le nombre de front montant du cpu en micro ou mili second ?Merci

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    Par défaut
    QueryPerformanceFrequency() te donne la résolution du compteur le plus précis auquel un programme Windows ait accès. Si ce nombre est de l'ordre du million, alors la résolution du compteur est de l'ordre de la microseconde.

Discussions similaires

  1. Aide: calcul du débit sortant
    Par HaTiMux dans le forum Développement
    Réponses: 9
    Dernier message: 02/08/2012, 15h25
  2. balance et calcul de débit
    Par YVES MORELE dans le forum LabVIEW
    Réponses: 1
    Dernier message: 20/03/2012, 19h37
  3. Calcul du débit de l'eau dans une digue
    Par tyybot dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/01/2010, 18h10
  4. [Réseau]calcul débit download
    Par FFF dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 23/11/2005, 12h56
  5. Calcul de débit
    Par mseprog dans le forum Développement
    Réponses: 5
    Dernier message: 24/03/2005, 13h35

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