[Python] Utilizzo di Readline con socket

Manlio Perillo manlio_perillo a libero.it
Mer 30 Gen 2008 13:25:17 CET


De Santis Luca ha scritto:
>  >
>  > NOTA: le variabili dovrebbero iniziare con una lettera minuscola.
>  >
> E' una convenzione o é obbligatorio ? Perché sto studiando il python sul 
> testo "pensare Informatico" ma non ho trovato riferimenti alle maiuscole
>  >


http://python.org/dev/peps/pep-0008/

>  > Ma non stavi parlando di socket? Come funziona il collegamento via 
> seriale?
>  >
> 
> Il socket é fatto via bluetooth sul cellulare
>  
> #Avvio del server RFCOMM
> def StartServer():
>     global conn
>     server = socket.socket(socket.AF_BT, socket.SOCK_STREAM)

Non conoscevo questa possibiltà.
Quindi ti connetti via bluetooth e non via seriale.

>     channel = socket.bt_rfcomm_get_available_server_channel(server)
>     server.bind(("", channel))
>     server.listen(1)
>     socket.bt_advertise_service(u"JesterPlugIn", server, True, 
> socket.RFCOMM)
>     socket.set_security(server, socket.AUTH | socket.AUTHOR)
>     print "- Waiting for clients..."
>     conn, client_addr = server.accept()
>     return conn
>     print "- Jester connected with phone"
>  
> Esite un modo per aggirare il problema di ReadLine ? Ho provatao anche 
> con l'istruzione read ma nessun riultato :( Lo script sul telefono sul 
> telefono comunica con un client fatto in vb6 su Windows ed in RealBasic 
> su Mac.
> 


Ora non conosco i dettagli della gestione di un socket della famiglia 
bluetooth, ma di solito una readline blocca fino a che non accade una 
delle seguenti condizioni:

1) Ci sono dati disponibili nel buffer di ricezione
2) Tra i dati disponibili c'è il terminatore di linea
    (dovrebbe essere '\n')
3) Il client chiude la connessione


La soluzione è usare select o poll e leggere dei dati *solo* quando 
disponibili, impostando i socket in modalità non bloccante.

Nota che comunque c'è la possibilità che readline blocchi, ad esempio se 
sono disponibili dei dati nel buffer di ricezione ma non il terminatore 
di linea.

Nel tuo caso non dovrebbero esserci problemi, ma dovresti controllare.



La soluzione alternativa (popolare, ma sconsigliata) è usare un thread 
separato.



Manlio Perillo


More information about the Python mailing list