im, выполняющий некоторые базовые программирование сокетов в python. Но у меня возникли проблемы с выяснением того, как мой echoserver мог заметить, что эхоклиент закрыл его соединение, без постоянного пинга/понга или таймаута.Socket close handler and proxy
echoclient.py
#echoclient
import sys
import socket
import os
import datetime
def log(s):
return datetime.datetime.now().strftime('%H:%M:%S') + ' - ' + s
s = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 9000))
while 1:
try:
foo = raw_input('what do you want to send?: ')
if len(foo) > 0:
s.send(foo)
except KeyboardInterrupt:
print 'shutting down connection'
s.close()
break
data = s.recv(1024)
if data:
print log('Recieved'), repr(data)
echoserver.py
#echoserver
import sys
import socket
import os
import datetime
def log(s):
return datetime.datetime.now().strftime('%H:%M:%S') + ' - ' + s
port = 9000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', port))
s.listen(5)
while 1:
conn, addr = s.accept()
conn.settimeout(10)
print 'Connected by', addr
while 1:
try:
data = conn.recv(1024)
if data:
print log(repr(data))
conn.send(data)
except KeyboardInterrupt:
print 'Closing connection ', addr
conn.close()
sys.exit(1)
except:
print 'Exception caught! closing connection ', addr
conn.close()
break
Теперь единственный способ сервер знает, что клиент умер находится в conn.settimeout (10)
Как я могу получить исключение для своего сервера, когда клиент отключается предпочтительно без сообщения pt/pong-сообщения betw их или установление.
Мой следующий шаг - создать эхопрокси между эхоклиентом и echoserver, мне нужно будет использовать потоки/многопроцессорность, чтобы достичь этого? Любые советы или указатели?
Что еще вы должны комментировать плохие/хорошие практики приветствуются
Спасибо!
используя ubuntu 11.10, python 2.7.2 – daniel