recv() 函数不等待数据

recv() function not waiting for data

我正在制作一个客户端-服务器应用程序,当服务器等待来自客户端的数据时我遇到了一些麻烦。

我的客户端连接到服务器套接字后,服务器为其打开新线程并从客户端获取数据(格式为JSON)。 到目前为止,我的代码适用于单个消息。当我添加 while 循环时,总是接受消息我遇到了问题。经过一些测试后,我发现 recv() 函数没有等待新数据并继续到下一行,这就是造成问题的原因。 如果你能帮我解决问题,我会很高兴。

我的接收数据循环(循环的第一次迭代工作但在第二次迭代中接收数据不等待数据并因为下一行没有获得任何数据而出现问题)-

    while True:
        data = self.client.recv(self.size) # receive data
        message = self.JSON_parser(data) # parser the data (data in json format)
        process_message = processing.Processing(message[0]['key'],message[0]['user'],message[0]['data']) # send the receive data to the initialize process
        process_return = process_message.action() # call to the action function
        self.client.send(process_return) # send to the client message back

如果recv()返回空字符串,则表示连接已关闭。

套接字可能被客户端或服务器关闭。在这种情况下,查看您发布的服务器代码,我几乎可以肯定客户端正在关闭连接,可能是因为它正在退出。

通常,您的服务器代码应如下所示:

while True:
    data = self.client.recv(self.size)
    if not data:
        # client closed the connection
        break
    message = self.JSON_parser(data)
    ...

额外提示: 一条长 JSON 消息可能需要多次调用 recv()。同样,recv().

可能会返回多个 JSON 消息

确保适当地实施缓冲。考虑 wrapping your socket into a file-like object 并逐行阅读您的消息(假设您的消息由换行符分隔)。