Bonjour,
pour connaitre les octets reçus ou envoyés, j'utilise le code suivant :
Cela semble fonctionner correctement la plupart du temps. De temps en temps, j'ai des informations notablement fantaisistes, tel qu'un débit obtenu par la différence entre 2 quantités d'octets reçus divisée par la différence de temps en secondes entre les 2 valeurs. J'obtiens, par exemple, 4 MOctets/s, valeur en désaccord avec d'autres logiciels de mesure de débits.
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 void TDebits::RecusEnvoyes(unsigned long int& Recus, unsigned long int& Envoyes) { char buf[256]; unsigned int uiRecus, uiEnvoyes; HINSTANCE Dll =LoadLibrary(L"iphlpapi.dll"); if(Dll == NULL) { AnsiString asLigne = "Impossible de charger la DLL iphlpapi.dll"; asLigne += "\n Le programme va se fermer"; ShowMessage(asLigne); Close(); } PMIB_IFTABLE buffer; MIB_IFROW donnees; DWORD getiftable_rc; ULONG buf_size = 0; typedef DWORD( *MYDLLFUNCTION)( PMIB_IFTABLE , PULONG , BOOL ); MYDLLFUNCTION getiftable; getiftable = (MYDLLFUNCTION)GetProcAddress(Dll, "GetIfTable"); buffer = (MIB_IFTABLE*) malloc(sizeof(MIB_IFTABLE)); getiftable_rc = getiftable(buffer, &buf_size, TRUE); free(buffer); buffer = (MIB_IFTABLE*) malloc(buf_size); getiftable_rc = getiftable(buffer, &buf_size, TRUE); DWORD dwOutOctets, dwInOctets; dwOutOctets = dwInOctets =0; for(unsigned int i = 0; i < buffer->dwNumEntries; i++) { donnees = buffer->table[i]; dwOutOctets += donnees.dwOutOctets; dwInOctets += donnees.dwInOctets; } uiRecus = dwInOctets; uiEnvoyes = dwOutOctets; Recus = uiRecus; Envoyes = uiEnvoyes; } //---------------------------------------------------------------------
Quelqu'un aurait-il une idée sur ce problème ?
Merci d'avance.
Partager