[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