Lost connetion Socket Server

di il
1 risposte

Lost connetion Socket Server

Ciao a tutti, sto scrivendo un programma in Python costituito da 2 socket (un client ed un server) che si scambiano messaggi tra di loro. Il programma funziona alla perfezione nel momento in cui entrambi i socket hanno una connessione internet attiva.
I problemi sorgono nel momento in cui, ad esempio, il PC dove gira il socket server si scollega da Internet (ad esempio si spegne il router).

Faccio un piccolo esempio per far comprendere meglio il problema:
1) il socket server chiama la funziona receive() e si blocca su essa in attesa di un messaggio dal client
2) il PC dove gira il server si scollega da Internet
3) il socket client chiama la funzione send() con cui invia il messaggio al client

Il programma si blocca in quanto il messaggio non arriva al socket server (poiché non c'è connessione) ed il socket client non può inviare ulteriori messaggi in quanto non riceve alcun messaggio dal socket server di avvenuta ricezione del messaggio.

Una possibile soluzione che mi era venuta in mente era far sapere al socket client che il PC dove gira il server si è scollegato da Internet, il problema è che non saprei come far sapere questa informazione al client. Esiste un modo?

Ovviamente, se ne avete, sono ben accette altre possibili soluzioni, ci sto smanettando da ore ma non ne vengo a capo ahah

Grazie a tutti per l'aiuto

1 Risposte

  • Re: Lost connetion Socket Server

    Ciao.
    Un'idea che mi viene così su due piedi è la possibilità di lanciare due thread.
    - Il primo controlla la connessione con il la libreria os [
    os.system("ping <indirizzo del server")
    ] e qualora cada la connessione va a
    modificare il valore di una variabile booleana globale [utilizza i lock per la scrittura su quella variabile]
    - Nell'altro una macchina a stati sulla variabile se alta [quindi true] inizia la comunicazione con il server, se no scrive un Log di mancata
    comunicazione

    Spero di essere stato chiaro.
    Grazie
Devi accedere o registrarti per scrivere nel forum
1 risposte