将tcp客户端套接字类从python2转换为python3

时间:2018-03-01 20:04:29

标签: python sockets

我需要编写一个在后台运行的tcp客户端。我找到了一个有趣的课程,它正是我在这个链接上所需要的:Code sample - socket client thread。我想在我的项目中实现它,因为我发现它比标准库中的示例或PyMOTW-3中的模块更好。问题是,它是用Python2编写的,我不断用这个方法得到错误:

def _recv_n_bytes(self, n):
    data = ''
    while len(data) < n:
        chunk = self.socket.recv(n - len(data))
        print(chunk)
        if chunk == '':
            break
        data += chunk
    return data

在我的研究过程中,我逐渐意识到Py2和Py3在字符串解释方面有不同的行为。所以我基本上尝试了解码/编码('UTF-8')'数据'或'块'的任何组合,但不知怎的,我总是最终在这一行chunk = self.socket.recv(n - len(data)),我得到一个通用'MemoryError'(没有进一步说明)!

有谁知道发生了什么事?或者,有人可以建议我一个现成的类来为tcp客户端连接设置一个单独的线程吗?

感谢。

1 个答案:

答案 0 :(得分:0)

最近我自己玩插座,我遇到了同样的问题。您应该做的是对发送给接收方的任何数据进行编码,并解码您在客户端接收的任何数据。

所以你应该对chunk = self.socket.recv(n - len(data)).decode()

的影响使用一些东西

在发送方,你应该这样编码:socket.send(data.encode())