Il codice fornito implementa un server socket in Python utilizzando il modulo socket e threading per consentire la comunicazione bidirezionale tra il server e un client attraverso una connessione TCP.
-
Moduli:
socketviene utilizzato per la gestione delle connessioni di rete.timeviene importato per utilizzare la funzionectime()per ottenere il tempo corrente.threadingviene utilizzato per gestire i thread multipli e consentire la comunicazione simultanea con il client.
-
Inizializzazione del codice:
sADDR = ("", 45002) buff = 1024 servSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) servSock.bind(sADDR) servSock.listen(5)
sADDRrappresenta l'indirizzo IP del server e la porta sulla quale il server rimane in ascolto per le connessioni in entrata. Lasciando il valore dell'indirizzo vuoto i dati del server verranno mandati direttamente al dispositivo richiedente.buffdefinisce la dimensione dei datiservSockè il socket del server, viene inizializzato utilizzandosocket.socket()specificandoAF_INETper l'indirizzo IP eSOCK_STREAMper il tipo di socket TCP.- Il server si mette in ascolto su sADDR utilizzando il metodo bind() e listen().
-
Accettazione della connessione:
cliSock, cADDR = servSock.accept()
Il server si mette in attesa di connessioni in arrivo utilizzando
servSock.accept(). -
Funzioni di invio e ricezione:
def receive(): while True: rMessage = cliSock.recv(buff) if not rMessage: print("Ending connection") break print("[{0}]: {1}".format(ctime(), rMessage.decode('utf-8'))) def send(): while True: sMessage = input(">>") if not sMessage: break cliSock.send(sMessage.encode('utf-8'))
- La funzione
receive()è un thread che riceve i messaggi dal client tramitecliSock.recv()e li stampa a schermo. Se il messaggio ricevuto è vuoto, la connessione viene chiusa. - La funzione
send()è un thread che acquisisce l'input dall'utente attraversoinput()e invia il messaggio al client tramitecliSock.send(). Se l'input è vuoto, il ciclo termina.
- La funzione
-
Avvio dei thread:
t1 = threading.Thread(target=send, name=3) t2 = threading.Thread(target=receive, name=4) t1.start() t2.start()
- Vengono creati due oggetti thread
t1et2, ciascuno associato a una delle due funzioni di invio e ricezione. - I thread vengono avviati utilizzando il metodo
start(), consentendo loro di eseguire le rispettive funzioni in modo concorrente.
- Vengono creati due oggetti thread
Il codice implementa con successo un server socket che consente la comunicazione bidirezionale con un client attraverso una connessione TCP. L'utilizzo di thread separati per la ricezione e l'invio dei messaggi consente al server di gestire più connessioni simultaneamente.
Warning
Il codice non include gestione degli errori, che potrebbe essere necessaria per garantire una maggiore robustezza e sicurezza dell'applicazione.