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



我需要编写一个在后台运行的 tcp 客户端。我在这个链接中找到了一个有趣的类,它完全符合我的需要:代码示例 - 套接字客户端线程。我想在我的项目中实现它,因为我发现它比标准库中的示例或 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)),在那里我得到一个通用的"内存错误"(没有进一步的描述(!

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

谢谢。

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

所以你应该使用一些影响chunk = self.socket.recv(n - len(data)).decode()

在发送端,您应该按以下方式编码:socket.send(data.encode())

最新更新