使用SocketServer发送/接收无限循环 - Python - ConnectionAbortedError

时间:2013-01-07 17:40:00

标签: python client-server handle socketserver

我正在尝试使用socketserver创建一个简单的服务器,以便通过TCP将图像发送到客户端。 首先,我将目录发送给客户端,然后它会响应请求。

在我的服务器的句柄中,我有这个循环:

class MainHandler(socketserver.BaseRequestHandler):
def handle(self):

        while 1:
            try:
            # Sending the catalogue
                # Using my methods to get my catalogue with a HTTP header
            response = self.server.genHTTPRequest(self.server.init.catalogue)
            self.request.sendall(response.encode())

            # Response of the client
            self.data = self.request.recv(1024).decode()
            if self.data:
                print("Data received : {}".format(self.data))

        except:
            print("transmission error")
            break;

在主要内容中,我使用此行创建我的服务器(它在另一个文件中):

mainServer = MainServer.MainServer((init.adresse, int(init.port)), MainServer.MainHandler)

当我启动此程序时,客户端连接成功并接收目录,但它只返回一些数据,程序跳转除了try / catch。没有try / catch,我收到了这个错误:

self.data = self.request.recv(1024).decode()
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine

我不明白是什么问题,可能缺少同步或者我是否需要使用线程?

感谢您的帮助

(我正在使用python 3.3)

1 个答案:

答案 0 :(得分:0)

问题在于sendall(response.encode()),而self.request.recv(1024).decode()已在同一套接字中完成,可能会导致ConnectionAbortedError

在将其他数据放入套接字之前,您需要从套接字读取所有数据。就像刷新数据一样。