View Full Version : [C o Java] Velocità di Connessione
aenema82
31-03-2007, 15:01
Salve,
Devo trovare il modo per ottenere da Codice le caratteristiche della connessione o della scheda di rete. Insomma le velocità di UPLoad e DownLoad massime...
mi serve sia per Windows che in Linux!
Qualche idea?????
Grazie Comunque.
Aenema
Non puoi...figurati che non le sa nemmeno il so ;)
L'unica è fare un test di download e upload (prolungato, non certo 1 KB) verso un server noto che ovviamente dovresti mantenere te.
aenema82
31-03-2007, 15:26
maddai!!!
mi serve assolutamente!
non si può andare a leggere i file dei driver?
non c'è una stringa col nome della scheda?
e come fanno i programmi di monitoring?
se faccio ctrl+alt+canc mi viene fuori statistiche di rete!
ed in linux?
Allora non ho capito cosa ti serve di preciso...vuoi sapere la velocità massima della connessione ad internet ? Vuoi sapere la velocità attuale della connessione ad internet istante per istante ? Vuoi conoscere l'utilizzazione della scheda di rete ?
aenema82
31-03-2007, 15:43
voglio conoscere le specifiche della scheda di rete se sono in una lan.
ad esempio: 10 Mbps, 100Mbps 1 Gbps o altro ?
questo sarebbe già un ottimo risultato. se riesco a farlo sia per Win che per Linux.
se poi riesco ad ottenere pure i dati della connessione, ad esempio a quanto può andare la mia adsl (le famose 640Kbps, 2 Mbps, etc) offro da bere a tutti!!
THX ancora!
se poi riesco ad ottenere pure i dati della connessione, ad esempio a quanto può andare la mia adsl (le famose 640Kbps, 2 Mbps, etc) offro da bere a tutti!!
E questo che non puoi sapere...lo puoi solo misurare. La velocità della connessione non la sa nemmeno il modem che conosce solo il valore della portante, ma può succedere anche di avere la portante a 4Mega ed avere una velocità di download pari a 640K ;)
aenema82
31-03-2007, 15:54
ok, allora le 4 Mega come le ottengo?
Nessun altro mi da dire?
Generalmente non puoi nemmeno ottenere la portante perché è un parametro che conosce solo il modem. Su Windows, con alcuni modem USB potresti rilevare la portante andando a prendere con le API la velocità della connessione dialup in corso (però ripeto che non è una procedura universalmente valida).
La stessa cosa ti potrebbe permettere di rilevare anche la velocità della connessione di rete (10 - 100Mbit).
Praticamente devi andare a prendere la velocità che appare nei computerini che rimangono nella system tray.
Ora cerco un po' le api necessarie per fare questo e ti faccio sapere...
PS: non a caso programmi del calibro di emule o di realplayer fanno impostare a te la velocità e quelli che non la fanno impostare fanno un test verso un servizio preimpostato
Qui ci sono diversi metodi per rilevare i parametri di connessione delle schede di rete:
http://www.codeguru.com/cpp/i-n/network/article.php/c5387/
http://www.codeguru.com/cpp/i-n/network/networkinformation/article.php/c5407/
http://www.codeguru.com/cpp/i-n/network/networkinformation/article.php/c5437/
Su Linux per ottenere gli stessi parametri l'unica cosa che mi viene in mente è fare il parsing dell'output di ifconfig.
Comunque nessuno dei metodi sopra permette di rilevare la velocità della connessione.
aenema82
31-03-2007, 16:40
Ok. Vedo che riesco a fare!
Grazie!
Mi dispiace, ma non riesco a trovare le API di cui ti parlavo, ormai sono diversi anni che le ho usate...comunque avevano a che fare qualcosa con RasEnum...
Trovate !!!
http://msdn2.microsoft.com/en-us/library/aa446739.aspx
Parti da RasEnumConnections
Dopo dovresti riuscire ad ottenere la velocità della connessione con RasGetLinkStatistics.
Con queste funzioni non se se puoi riuscire a rilevare la velocità delle schede di rete, comunque sicuramente puoi riuscire ad ottenere la portante e le statistiche delle connessioni dialup di molti modem usb.
aenema82
31-03-2007, 18:09
OK Grazie ancora.
esiste un modo per compilare sta cosa in gcc?
Ovviamente è tutta roba per Windows...se ti riferisci ad un porting di GCC per Windows allora la risosta è sì, ma devi avere il supporto al SDK di MS nel compilatore (header e librerie). Ad esempio MinGW32 ce l'ha questa possibilità.
aenema82
02-04-2007, 09:20
Scusa ancora,
ho installato MinGW32. effettivamente ora ci sono i file ras.h e librasapi32.a che credo siano necessari.
il problema ora è: come si compila sto programma?
scrivendo: gcc Conn.c
restituisce una lunga serie di errori, il più ripetuto è:
...include/ras.h:xxx: syntax error before ...
un aiutino?
Devi aggiungere anche:
gcc -lrasapi32 Conn.c -o Conn.exe
Se usi anche altre api devi andare a vedere su msdn in quale libreria sono definite e linkarla con il parametro -lnome_libreria
Devi includere anche windows.h probabilmente ;)
aenema82
03-04-2007, 19:33
OK Grazie!
col modem adsl funziona perfettamente!!!!
ma se ho una scheda ethernet o wifi o altro ....? come si fa?
forse col regedit?
Sinceramente non lo so...si riescono a recuperare tutti gli indirizzi della connessione, ma non so come si faccia a recuperare i Mbit.
aenema82
05-04-2007, 09:47
e con Performance Data Helper, pdh.lib?
qualcuno la sa usare?
aenema82
10-04-2007, 15:13
e Se invece provassi a determinare la velocità tramite dei test:
spedendo e scaricando dati dalla rete e misurando le prestazioni.
che funzioni dovrei usare ( in Java ) ?
o meglio: qual'è il modo migliore per fare ciò?
Il modo è abbastanza semplice, ovviamente devi avere a disposizione un server con una banda a disposizione abbastanza consistente, soprattutto se questo programma dovrà essere usato da molti utenti.
Basta scaricare un file da un server noto e, o mentre lo scarichi o quando hai finito, calcolarti il tempo di download e con questo dividere la quantità di dati scaricati.
Per l'upload invece la cosa si complica, hai a disposizione diverse strade:
- ti colleghi ad un servizio che implementi te e che sta su un server e con questo instauri una connessione, misurerai la velocità inviandogli dei dati e lui ti restituirà la velocità effettiva
- fai un upload http verso uno script server side che ti restituisce in risposta la velocità
Con la prima possibilità puoi implementare sia la misura del download che dell'upload e magari ridurre al minimo i tempi contando su una quantità di dati scambiata più piccola.
hai mai sentito parlare di "ping"...
Edit: La velocità effetrtiva la determina in realtime... espressa in ms poi ti calcoli il dowenload o l'upload sempre in realtime.
su windows la finestra è fino 2500
puoi anche pingare spedendo tot k, mb ecc ecc e verificare l'ms sempre in realtime.
Sapendo il tipo di modem montato puoi, non in real time, dire che di default, puoi scaricare o uppare di "tot". QUindi in collegamento se ci sono problemi o i pacchetti transitano in moltissimi nodi per problemi di traffico ecc ecc il tempo di download o upload cambia.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.