Python3 Socket服务端多线程发消息报需字节类对象错误如何解决
问题原因
Python3中socket.send()方法只接受字节类型(bytes)作为入参,你当前newthread.answer()返回的是字符串类型(str),所以触发类型错误。
解决方案
有两个常用的插入encode('utf-8')的位置,选其中一个即可:
方案1:调用send时直接编码(最直观,推荐)
把发送消息的行改成:
conn.send(newthread.answer().encode('utf-8')) # echo
方案2:修改ClientThread的answer方法返回字节类型
如果你希望这个类统一返回可直接发送的字节格式,修改answer方法:
def answer(self): return self.m_answer.encode('utf-8')
补充注意事项
- 建议加判空逻辑避免
m_answer为None时调用encode报错,示例写法:res = newthread.answer() or '' conn.send(res.encode('utf-8')) - 你当前用
while newthread.isAlive(): pass空循环等线程结束会占用大量CPU,可以直接删掉这行,仅用newthread.join()即可实现等待线程执行结束的效果,代码效率更高。
内容的提问来源于stack exchange,提问作者user2358384
相关产品推荐
相关产品推荐

