Salve,
tramite un socket vorrei spedire un flusso di dati testuali...ma
vorrei gzipparli c comprmimerli in generale in real time prima di passarli al socket.
Come si può fare??
Grazie
Salve,
tramite un socket vorrei spedire un flusso di dati testuali...ma
vorrei gzipparli c comprmimerli in generale in real time prima di passarli al socket.
Come si può fare??
Grazie
Alla batteria dai retta ballA
ciao
io per comprimere i dati durante lo stream usavo questo sistema di layer.
APPLICAZIONE PRINCIPALE <=> COMPRESSORE/DECOMPRESSORE <=> GESTORE SOCKET
L'applicazione principale invia un pacchetto di dati di dim che sono grandi a piacere.
Ammettiamo che vuole inviare un pacchetto di 150KB.
A livello di programmazione rimane pur sempre nella pratica un invio di una stringa binaria di 150KB.
Il compressore comprime in zlib o gzip, non ricordo cosa usavo.
Il risultato della compressione è una stringa sempre binaria.
All'inizio della stringa aggiungo un byte fisso costante 0xqualcosa.
Si aggiunge dopo il byte costante la DIM in byte della stringa compressa
esempio
0x23 0x00 0x00 0x00 0x0f <stringa binaria di 15 byte>
0x23 è costante
0x00 0x00 0x00 0x0f è la lunghezza in byte della stringa compressa.
Successivamente invierai all'altro client il risultato delle operazioni precedenti.
Il primo byte dovrà essere 0x23 per chi riceve.
I 4 byte successivi mi dicono quanti dati devo caricare prima di poterli spacchettizare.
Appena il mio buffer si riempie della DIM giusta allora riprendo la stringa di 150KB iniziali e la passo alla funzione che decomprime.
Consigli:
Comprimi il pacchetto solo se i dati da inviare alla volta sono più grandi 1KB. Inq uesto caso per riconoscere se un pacchetto che arriva è compresso o meno puoi usare due costanti iniziali differenti (0x23 se è compresso e 0x24 se non lo è).
Questo è il sistema che usavo io e che usa anche emule.
Chiamami se non hai capito! Non che ti sottovaluti ma so per certo che non so spiegarmi come vorrei /cry
Ciau^^
...
sei stati chiarissimo!
Alla batteria dai retta ballA