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

Python TCP Socket编程报错:'tuple' object has no attribute 'decode'

问题原因及修正方案

核心错误分析

你遇到的AttributeError是因为TCP套接字误用了UDP的接收方法:

  • 服务端代码里的client.recvfrom(4096)是UDP协议专用的接收方法,它返回的是包含(字节数据, 客户端地址)的元组,所以你调用data.decode()时,实际是在对元组操作,自然触发报错。

其他问题及修正点

除核心错误外,代码还有两处TCP使用的错误:

  1. 非阻塞设置冗余:server.setblocking(0)是给监听用的server套接字设置非阻塞,完全没必要,反而会导致后续循环逻辑异常,直接删除这行即可。
  2. send方法参数错误:TCP是面向连接的协议,调用client.send()时不需要传入addr参数,直接发送字节数据就行。

修正后的服务端代码

import socket 
bind_ip = "127.0.0.1"
bind_port = 7777
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, bind_port))
server.listen(1)
print('[*] TCP Server Listening on:', bind_ip,' ',bind_port)
while True:
    client, addr = server.accept()
    data = client.recv(4096)  # 改用TCP专属的recv方法
    print('[*] Accepted connection from: ', addr, ' : ', data.decode())
    response = 'Connected'
    client.send(response.encode())  # 移除多余的addr参数
    client.close()

客户端代码小优化

客户端代码里的client.send(data.encode('utf_8'))可以简化为client.send(data.encode()),默认编码就是utf-8,不影响功能但更简洁。

内容的提问来源于stack exchange,提问作者Avocado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:41:00