[Python] controllare risposta tcp/ip
Manlio Perillo
manlio.perillo a gmail.com
Mar 21 Ago 2012 16:46:17 CEST
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Il 21/08/2012 12:47, Matteo Perini ha scritto:
> Ciao a tutti,
> sapete dirmi come fare a controllare la risposta ottenuta durante una
> comunicazione client-server?
>
Lo devi decidere tu, definendo un protocollo sopra TCP/IP.
> Cerco di spiegare meglio il mio problema.
> ho del codice simile a questo:
>
> s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
> s.connect(("192.168.1.102",5001))
> s.send('comando')
> resp = s.recv(1024)
>
>
> dove 1024 dovrebbe essere il numero di caratteri "letti". giusto?
>
Il numero massimo di bytes (non caratteri, che sono un altra cosa) da
leggere.
Vedi anche:
http://pubs.opengroup.org/onlinepubs/7908799/xns/recv.html
> Quando invio il comando dovrei ottenere una risposta dal server e
> solitamente è così.
> Il problema è che la risposta resp che ottengo, in qualche caso, appare
> troncata.
>
Si, perchè non sai quanto è lunga e quindi o leggi troppo poco (e la
risposta è ovviamente troncata) oppure leggi troppo (e recv bloccherà
indefinitivamente, a meno che l'altro lato della connessione non chiuda
la connessione).
> [...]
> Come posso controllare che la struttura arrivi completa?
Definisci un protocollo, ad esempio netstring
http://en.wikipedia.org/wiki/Netstring
oppure, semplicemente, fai in modo da utilizzare una sola connessione
per ogni richiesta/risposta.
In questo caso il programma che invia il file XML deve chiudere la
connessione dopo aver inviato tutti i dati; lato server termina di
leggere quando recv restituisce una stringa vuota.
Di volta in volta leggi 8196 bytes, che è la lunghezza consigliata per
il buffer.
> [...]
Ciao Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAlAznzkACgkQscQJ24LbaUSMRgCeOI05mOP2WRqrSvgU5e5Tskkm
eOsAnjHnXy7ptuCQo+MNfedodotlj/is
=Kyp9
-----END PGP SIGNATURE-----
Maggiori informazioni sulla lista
Python