[Python] Socket

Simone Ziraldo simone.ziraldo a gmail.com
Gio 14 Lug 2011 21:44:39 CEST


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


Maggiori informazioni sulla lista Python