[Python] problema con socket (lettura blocking)

Vittorio Spina vittorio.spina a gmail.com
Ven 4 Ott 2013 17:46:04 CEST


Il 04/10/2013 17:40, Manlio Perillo ha scritto:
> -----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?
in che senso il protocollo? E' una connessione TCP-IP... intendi come 
sono fatti i dati? in quel caso è un po complesso, diciamo che lui spara 
di continuo un header dove è scritto quanti punti ha scnsionato e poi la 
lista dei punti...
>
>> 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?
si ovviamente è specificato, diciamo che avvio il programma e sono alla 
scansione tipo 5500 e di lì inizio 5501, 2, ...
chiudo un attimo e riavvio il codice e sono a 7324, 7325...
insomma rimane appeso, mi aspetta.
>
>> 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?
voglio i dati in tempo reale. Se apro e chiudo il socket scatta un po' 
ma funziona, altrimenti vedo con un ritardo di circa 5 secondi, che non 
va bene.
>
>> 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.
non ho capito come, puoi farmi un esempio?
>
>> 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-----
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python

-- 
==========================================
Spina Giovanni Vittorio
email:		vittorio.spina a gmail.com
------------------------------------------
mobile: 	+39 389 15 24 211
==========================================

:: AVVISO PRIVACY
= = = = = = = = = = = = = = = = = = = =
Il contenuto della presente e-mail ed i suoi allegati,
sono diretti esclusivamente al destinatario e devono
ritenersi riservati, con divieto di diffusione o di uso
non conforme alle finalità per le quali la presente e-mail
è stata inviata.
Pertanto, ne è vietata la diffusione e la comunicazione
da parte di soggetti diversi dal destinatario, ai sensi degli
artt. 616 e ss. c.p. e D.lgs n. 196/03 Codice Privacy.

Se la presente e-mail ed i suoi allegati sono stati ricevuti
per errore, siete pregati di distruggere quanto ricevuto e
di informare il mittente al seguente recapito:
Mailto:vittorio.spina a gmail.com
==========================================



Maggiori informazioni sulla lista Python