[Python] problema con socket (lettura blocking)

Manlio Perillo manlio.perillo a gmail.com
Ven 4 Ott 2013 17:40:12 CEST


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 04/10/2013 17:33, Vittorio Spina wrote:
> Ciao a tutti. Ho scritto un programma che riceve dati da un Laser
> con interfaccia Ethernet.
> 

Quale e' il protocollo usato dallo strumento?

> il programma riassumento ha la seguente forma:
> 
> from socket import * import config s = socket(AF_INET,SOCK_STREAM) 
> s.connect((config.IP, config.PORT)) while 1: if s.recv(1)=="\xAA": 
> letturaNumero = s.recv(1)
> 
> quando lancio il codice noto che letturaNumero identifica un
> numero progressivo.

Noti?
Non e' specificato nel protocollo?

> E' come insomma se il device stesse ad aspettarmi fino alla
> lettura successiva, cosa che io non voglio poich│ i dati sono tanti
> e poi mi ritrovo con una sorta di macchina del passato.
> 

Cosa vuoi fare, allora?

> Se invece faccio come segue
> 
> while 1: s = socket(AF_INET,SOCK_STREAM) s.connect((config.IP,
> config.PORT)) if s.recv(1)=="\xAA": letturaNumero = s.recv(1)
> 
> e cio│ apro e chiudo di continuo il socket, tutto funziona come
> vorrei. Ma l'operazione di apertura e chiusira del socket │ in
> effetti una cosa pensante. C'│ un modo per dire al socket di aprire
> una connessione e che il device non stia ad aspettarmi?

select o poll.
Usa select per attendere fino a quando lo strumento non ha inviato dei
dati, e chiama recv solo allora.

> Grazie.
> 
> p.s usando il comando s.setblocking(0) ricevo l'errore: [Errno
> 10035] Impossibile completare immediatamente l'operazione sul 
> socket non a blocchi

Probabilmente nel tuo caso non hai bisogno di impostare il socket in
modalita' non bloccante, ma dipende dal protocollo usato dallo strumento.


Ciao  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Using GnuPG with Icedove - http://www.enigmail.net/

iEYEARECAAYFAlJO4VwACgkQscQJ24LbaURMqgCaAoM+5ctD1G8NMmW4ZTA0LHYL
5rgAn1cC5cgmGkjjKQ435Op1y4PhmooS
=FBUM
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python