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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:54:03