Server-Client TCP Parte Seconda - Programmare in Python

Server-Client TCP Parte Seconda

# Creazione CLIENT SOCKET:
--------------------------------
# 1 - Creazione socket                      # socket.socket()
# 2 - Connessione al Server                 # connect(indirizzo)
# 3 - Invio di una Richiesta al Server      # send()
# 4 - Ricezione della Risposta dal Server   # recv()

Mentre le funzioni specifiche per il lato server sono:

# Creazione SERVER SOCKET:
--------------------------------
# 1 - Creazione socket                                                              # socket.socket()
# 2 - Collegamento del socket all'indirizzo della macchina e alla Porta Designata   # bind()
# 3 - Messa in ascolto in attesa della connessione del Client                       # listen()
# 4 - Accettazione del Client                                                       # accept()
# 5 - Ricezione Richiesta dal Client                                                # recv()
# 4 - Elaborazione di una Risposta                                                  # subprocess()						
# 5 - Invio Risposta al Client                                                      # send()

Di seguito trovate il codice utilizzato nello script sub_server, vi invito a guardare il video per commenti e spiegazioni al riguardo!

import socket
import subprocess


def ricevi_comandi(conn):
    while True:
        richiesta = conn.recv(4096)
        risposta = subprocess.run(richiesta.decode(), shell=True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
        data = risposta.stdout + risposta.stderr
        conn.sendall(data)


def sub_server(indirizzo, backlog=1):
    try:
        s = socket.socket()                    
        s.bind(indirizzo)                     
        s.listen(backlog)                     
        print("Server Inizializzato. In ascolto...")
    except socket.error as errore:
        print(f"Qualcosa è andato storto... \n{errore}")
        print(f"Sto tentando di reinizializzare il server...")
        sub_server(indirizzo, backlog=1)
    conn, indirizzo_client = s.accept() #conn = socket_client
    print(f"Connessione Server - Client Stabilita: {indirizzo_client}")
    ricevi_comandi(conn)


if __name__ == '__main__':
    sub_server(("", 20000))