[Python] Socket e lettura dati
Manlio Perillo
manlio.perillo a gmail.com
Sab 24 Mar 2012 14:41:36 CET
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Il 24/03/2012 13:21, Enrico 'Henryx' Bianchi ha scritto:
> On Friday, March 23, 2012 08:31:50 PM Manlio Perillo wrote:
>> Su IRC ricordo di averti consigliato di studiare le Netstrings, o simili.
>
> Si, ricordo anche io di questa discussione (di cui, pero`, non trovo traccia
> nei miei log, probabilmente l'abbiamo fatta quando ero a lavoro), il fatto e`
> che bene o male ho gia` una netstring, ovvero so come comincia la stringa
> ('["' o '[{"') e so come finisce ('}]\n'),
Se sei sicuro che \n non compaia all'interno della stringa, allora sei a
posto.
> mentre della sua lunghezza direi
> che non me ne faccio molto.
La lunghezza ti serve per preallocare il buffer e sapere quanti bytes
leggere, se vuoi delle buone prestazioni.
> Il problema e` che in alcuni casi tale stringa non
> mi arriva completa e mi crea grossi problemi, sia per il fatto che mi incarta
> la lettura, sia per il fatto che si tratta di un dato perso e che devo
> comunque recuperarlo, cosa che mi costringe a richiedere tutto il dataset
> senza la garanzia di recuperare quello che mi manca.
Daniele ti ha dato un suggerimento, vedi se dipende da quello.
> In teoria potrei
> risolvere facendo il controllo della corretta lunghezza della stringa (if
> (data[:2] == '["' or data[:3] == '[{"') and (data[-3:] == '}]\n')) ed inviare
> al client un comando di notifica che, in caso negativo, reinvia il dato
> (sinceramente mi sembra un po' brutto, ma non vedo alternative)
>
> Enrico
> P.S. che poi, se leggo i dati via netcat non ho alcun problema, ovvero le
> stringhe mi arrivano complete
>
Utilizzando lo stesso "server" (processo che invia i dati)?
In questo caso secondo me il problema è che ti trovi un '\n' dentro una
stringa...
Prova a mettere qualche assert:
for item in res.get():
assert "\n" not in item
n = conn.send(item + "\n")
assert n == len(item) + 1
Comunque usando i socket a basso livello ci sono molte cose a cui badare.
Ciao Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAk9tzxAACgkQscQJ24LbaUSQXwCcDHk4qt+eFXd9eZcBgJ62eydE
tLMAn1EVWlyVzbXLi9WfgBuQ/dMin+it
=vsWL
-----END PGP SIGNATURE-----
Maggiori informazioni sulla lista
Python