Python TCP Socket编程报错:'tuple' object has no attribute 'decode'
问题原因及修正方案
核心错误分析
你遇到的AttributeError是因为TCP套接字误用了UDP的接收方法:
- 服务端代码里的
client.recvfrom(4096)是UDP协议专用的接收方法,它返回的是包含(字节数据, 客户端地址)的元组,所以你调用data.decode()时,实际是在对元组操作,自然触发报错。
其他问题及修正点
除核心错误外,代码还有两处TCP使用的错误:
- 非阻塞设置冗余:
server.setblocking(0)是给监听用的server套接字设置非阻塞,完全没必要,反而会导致后续循环逻辑异常,直接删除这行即可。 - 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
相关产品推荐
相关产品推荐

