You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python通过Socket传输布尔值错误:发送False客户端接收为True

问题根因
  • Socket接收长度配置错误:你服务端发送的是字符串False,按常用编码(UTF-8/ASCII)转换后长度为5字节,而客户端设置的recv(3)仅会读取前3字节,最终解码得到非空字符串Fal。
  • Python布尔值转换规则问题:Python中只要是非空字符串,执行bool()转换得到的结果都是True,只有空字符串才会返回False。哪怕你完整接收到了字符串"False",直接用bool("False")转换得到的结果依然是True,这是非常容易踩的基础语法坑。
修复方案

最优方案:使用单字节标识传输布尔值

不需要转字符串,直接用单个字节代表布尔状态,既不会有截断问题,也不需要处理字符串转义,性能最高:
服务端代码修改为:

playerMoved = chessGame.movePossible(mousePos, prevCol, prevRow)
# 移动成功发b'1',失败发b'0'
conn.sendall(b'1' if playerMoved else b'0')

客户端代码修改为:

playerMove_raw = self.socket.recv(1)
playerMove = playerMove_raw == b'1'
# 后续逻辑不变
if playerMove:
   print(f"Player move turned out to be true")
   self.chessBoard = self.receiveBoard()

备选方案:保留字符串传输的修复方式

如果你一定要用字符串传输布尔值,需要做两处修改:

  1. 调整接收长度至少为5,保证能完整接收True(4字节)和False(5字节)两种字符串
  2. 不要直接用bool()转换,而是判断字符串内容是否等于"True"
    客户端代码修改示例:
playerMove = self.socket.recv(5)
playerMove = playerMove.decode(self.format).strip()
playerMove = playerMove == "True"

内容的提问来源于stack exchange,提问作者Heidar-An

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:45:03