|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2006
Città: Milano
Messaggi: 50
|
Limitare throughput socket in C/C++ o Java
Ciao!
Dovrei realizzare un programma in grado di limitare la "velocità" con cui invia i dati via socket tcp (stile sw di filesharing, dove è possibile indicare la velocità up/down max). C/C++ o Java è indifferente (per C/C++ intendo le classiche BSD-style). Mi basta agire su qualche parametro? Non ho molto tempo, sapete se esiste qualcosa di già pronto? ciao - s - |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Dal punto di vista concettuale non è difficilissimo: innanzitutto non puoi alterare la velocità di trasmissione dei pacchetti sul mezzo fisico di trasporto. Per esempio su una rete LAN a 100 Mbps, salvo congestioni o problemi vari, i pacchetti viaggiano appunto a 100 Mbps. E quello è. Però puoi ritardare/rallentare l'invio dei pacchetti facendo in modo che nell'unità di tempo (1 secondo) vengano inviati solamente un tot di dati. Come farlo tecnicamente non saprei dire perché non me ne sono mai occupato.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
Per la temporizzazione, ti memorizzi il time-stamp dell'inizo del "secondo" in cui vuoi inviare i tuoi 3KB(per esempio). Spedisci 3KB. Controlli se è gia passato un secondo. Se si, vai in sleep per il tempo rimanente. Altrimenti rinnovi il time-stamp dell'inizio del tuo secondo(questo puoi farlo in varie maniere...) e continui a spedire finche non riscrivi 3KB. Ultima modifica di thebol : 26-04-2007 alle 14:53. |
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2006
Città: Milano
Messaggi: 50
|
Grazie per i suggerimenti!
Si si la soluzione piu' diretta credo sia l'introduzione di un layer per incapsulare le socket base ed introdurre un conteggio dei kb inviabili per secondo (non si tratta di una sola connessione TCP, ma di un insieme di connessioni verso piu' macchine in rete).. ..e se il limite in velocità non fosse fissato a priori ma dinamico, in base alle reali capacità della macchina in rete? (non in LAN, ma su internet) (beh, ovviamente se ho una connessione analogica 56k, arrivato a trasmettere a 56kbps, qualsiasi prog non andrebbe oltre e sarebbe limitato a 56Kbps! buttare via i pacchetti "vecchi" non spediti? mmm.. e se passassi a qualche protocollo tipo RTP ? Non so se è chiaro il mio problema, ma che ne pensate? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:33.




















