Как держать сокет открытым, пока клиент не закроет его?

У меня простой python сервер и клиент.

Сервер:

import SocketServer
import threading


class MyTCPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        self.data = self.request.recv(1024).strip()
        print str(self.client_address[0]) + " wrote: "
        print self.data
        self.request.send(self.data.upper())


if __name__ == "__main__":
    HOST, PORT = "localhost", 3288
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

Клиент:

import socket
import sys
from time import sleep

HOST, PORT = "localhost", 3288
data = "hello"

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    sock.connect((HOST, PORT))
    sock.send(data + "\n")
    received = sock.recv(1024)

    sleep(10)

    sock.send(data + "\n")
    received = sock.recv(1024)

    sleep(10)

    sock.send(data + "\n")
    received = sock.recv(1024)

finally:
    sock.close()

Вот вывод, который я получаю:

Сервер:

>python server.py
127.0.0.1 wrote:
hello

Клиент:

>python client.py
Traceback (most recent call last):
  File "client.py", line 18, in <module>
    received = sock.recv(1024)
socket.error: [Errno 10053] An established connection was aborted by the software in your host machine

Я пробовал это и на машине linux. Сервер получает только одно сообщение, а затем я получаю ошибку на операторе recv второго сообщения. Я только начал изучать сетевые технологии на python, но мне кажется, что сервер по какой-то причине закрывает сокет. Как это исправить?

15
задан Bruce 25 December 2011 в 02:52
поделиться