Skip to content

GalileiIsNao-2024/socket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

socket

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.

Analisi

  1. Moduli:

    • socket viene utilizzato per la gestione delle connessioni di rete.
    • time viene importato per utilizzare la funzione ctime() per ottenere il tempo corrente.
    • threading viene utilizzato per gestire i thread multipli e consentire la comunicazione simultanea con il client.
  2. Inizializzazione del codice:

    sADDR = ("", 45002)
    buff = 1024
    
    servSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    servSock.bind(sADDR)
    servSock.listen(5)
    • sADDR rappresenta 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.
    • buff definisce la dimensione dei dati
    • servSock è il socket del server, viene inizializzato utilizzando socket.socket() specificando AF_INET per l'indirizzo IP e SOCK_STREAM per il tipo di socket TCP.
    • Il server si mette in ascolto su sADDR utilizzando il metodo bind() e listen().
  3. Accettazione della connessione:

    cliSock, cADDR = servSock.accept()

    Il server si mette in attesa di connessioni in arrivo utilizzando servSock.accept().

  4. 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 tramite cliSock.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 attraverso input() e invia il messaggio al client tramite cliSock.send(). Se l'input è vuoto, il ciclo termina.
  5. 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 t1 e t2, 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.

Conclusione

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages