Comunicazione fra computer e smartphone

Continuano nel prove di comunicazione in python, questa volta fra computer e smartphone. Utilizzando come schema i due programmi client e server visti in questo articolo ho pensato di iniziare a vedere come comunicare con uno smarphone Android.

Come prima cosa dobbiamo installare sullo smartphone l’app Pydroid3, vedi qui per le istruzioni, in questo modo abbiamo la possibilità di eseguire script in python.

Poi dobbiamo installare sul nostro computer l’interprete python, trovate qui le istruzioni. In questo modo anche sul computer possiamo esegure gli script in python.

Prepariamo il server sul computer

Il programma server, quello che attende la richiesta di comunicazione del client, è molto simile a quello visto negli articoli precedenti :

import socket
print ('avvio server');
HOST = '0.0.0.0' 
PORT = 60001
s = socket.socket() #senza parametri protocollo tcp e ipv4
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
print('Connesso ad IP: ', addr)
while True:
    dati = conn.recv(1024)
    if not dati:
        break
    conn.sendall(b'restituisco dati ricevuti:'+dati)
    print('dati ricevuti: ',dati)
s.close()    
print('Fine programma')

La modifica sostanziale è l’indirizzo IP con cui eseguiamo la funzione bind, quella che ci permette di creare una connessione con un’interfaccia di rete e una porta. Se mettiamo ‘0.0.0.0’ come indirizzo vuol dire che accettiamo qualsiasi collegamento da qualsiasi interfaccia, quindi anche esterna al computer. Si poteva utilizzare anche un valore nullo ‘ ‘ e il risultato sarebbe stato lo stesso, ma così mi sembra più chiaro.

Quindi avviando questo programma apriamo la porta 60001 (vi ricordo che le porta da 1 a 1024 sono riservate) a qualsiasi connessione in ingresso,

Prepariamo il cliente su Android

Sullo smartphone è sufficiente avviare l’applicazione Pydroid3 e incollare questo sorgente

import socket
HOST = '192.168.1.134'  
PORT = 60001        
print('avvio client')
s = socket.socket()
s.connect((HOST, PORT))
s.sendall(b'Testo di prova, andate su salentoplus.it')
dati = s.recv(1024)
print('Dati ricevuti: ', repr(dati))
s.close()

Facciamo partire lo script utilizzando l’icona a forma di triangolo in basso a destra e sulla console vedremo le informazioni inviate restituite dal server.

Fin qui tutto bene, facile facile, ma abbiamo alcuni problemi già visti negli articoli precedenti e che andremo a risolvere negli articoli prossimi.

Il primo problema è che non abbiamo la gestione degli errori, quindi se qualcosa va storto avremmo gli errori dell’interprete che non sono mai abbastanza chiari e che interrompono l’esecuzione dello script.

Il secondo problema è che il server resta in attesa di un unico client e quando avviene la connessione risponde e si chiude. Dovrebbe restare sempre in attesa, permettere la connessione di uno o più client e non chiudere la connessione appena riceve i dati e risponde ma restare in attesa del comando di chiusura connessione da parte del client.

Il terzo problema è che il server attende la connessione e non fa altro, mentre dovrebbe nel frattempo eseguire altre istruzioni tipo visualizzare lo stato delle connessioni, tenere sotto controllo dei sensori ecc.

Risolveremo nei prossimi articoli.

Maurizio

Lascia un commento