[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