Python socket调用send方法报TypeError: a bytes-like object is required, not 'str'如何解决
错误原因
- Python 3 中字符串默认是Unicode编码的
str类型,而socket网络传输只能传递二进制字节流,因此send()方法要求必须传入类字节(bytes-like)对象,直接传入字符串就会触发该类型错误。
修复方案
有两种常用修改方式,可根据场景选择:
方案1:直接声明字节串(适合纯ASCII字符内容)
给字符串前加b前缀,直接将内容定义为bytes类型:
connection.send(b"\n[+] connection established.\n")
方案2:调用字符串编码方法(通用场景,支持非ASCII字符)
调用str.encode()方法将字符串按指定编码转为字节流,默认编码为UTF-8,也可手动指定编码格式(如encode('gbk')):
connection.send("\n[+] connection established.\n".encode()) # 显式指定编码写法:connection.send("\n[+] connection established.\n".encode('utf-8'))
补充注意点
接收socket数据时,拿到的默认也是bytes类型,需要调用decode()方法转回字符串才能正常处理:
recv_data = connection.recv(1024).decode()
完整修改后示例代码
import socket connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM) connection.connect(("192.168.152.140", 4444)) # 这里用方案2的编码方式,兼容性更好 connection.send("\n[+] connection established.\n".encode()) connection.close()
内容的提问来源于stack exchange,提问作者Axmed Akariim Sheikh Ali
相关产品推荐
相关产品推荐

