我需要编写一个在后台运行的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客户端连接设置一个单独的线程吗?
感谢。
答案 0 :(得分:0)
最近我自己玩插座,我遇到了同样的问题。您应该做的是对发送给接收方的任何数据进行编码,并解码您在客户端接收的任何数据。
所以你应该对chunk = self.socket.recv(n - len(data)).decode()
在发送方,你应该这样编码:socket.send(data.encode())