Ciao a tutti,
avrei bisogno di un aiuto. Vorrei trasferire dei dati tra due pc via wireless e 
pensavo di ricorrere ai socket.
Fin qui tutto bene. Tra client e server c'è una connessione WiFi molto 
instabile e potrebbe anche cadere per qualche secondo/minuto.
Il problema dei socket è che, se la connessione cade improvvisamente senza 
nessun "avviso", il server aspetta di ricevere dati dal client infinitamente 
pur avendo impostato un settimeout diverso da None.

Forse un esempio potrebbe rendere più chiara la cosa:
[server]
import socket
HOST=''"
PORT=50007
s = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
s.bind( (HOST,PORT) )
s.listen(1)
conn,addr = s.accept()
while True:
        s.settimeout(2)
        conn.recv(1024)
        if not data:
                print("connessione chiusa")
                s.settimeout(None)
                conn,addr = s.accept()
        else:
                print "data"
s.close()

[client]
import socket
import time
REMOTE_HOST="192.168.1.?"
PORT=5007
s = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
try:
        s.connect( REMOTE_HOST, PORT)
except:
        print("Error")

s.send("blabla")
time.sleep(15)
s.send("blabla2")

Se durante lo sleep di 15 secondi chiudo la connessione WiFi il server non si 
accorge di niente e rimane ad aspettare su conn.recv(1024)...come posso 
risolvere questo problema? Avete qualche idea?

Grazie mille,
Simone
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a