将tcp客户端套接字类从python2转换为python3
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将tcp客户端套接字类从python2转换为python3相关的知识,希望对你有一定的参考价值。
我需要编写一个在后台运行的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客户端连接设置一个单独的线程吗?
谢谢。
答案
最近我自己玩插座,我遇到了同样的问题。您应该做的是对发送给接收方的任何数据进行编码,并解码您在客户端接收的任何数据。
所以你应该使用某些东西来影响chunk = self.socket.recv(n - len(data)).decode()
在发送方你应该编码:socket.send(data.encode())
以上是关于将tcp客户端套接字类从python2转换为python3的主要内容,如果未能解决你的问题,请参考以下文章
如何在 VB.NET 中检查 TCP 服务器(套接字)与 TCP 客户端的连接状态