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

Python Socket编程报错TypeError:需字节类对象而非字符串的问题咨询

解决Socket发送数据时的TypeError: byte-like object required错误

错误原因

你遇到的这个错误,核心问题在于Python的TCP套接字只接受字节类型的数据,而input()函数返回的是字符串(str类型)。当你直接把字符串传给sock.sendall()时,就会触发类型错误——函数期望的是字节对象,不是字符串。

修复后的客户端代码

只需要把用户输入的字符串编码成字节即可,常用的通用编码是utf-8,修改客户端的第8行代码就可以解决问题:

import socket
def client(host, port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((host, port))
    print('Client has been assigned socket name', sock.getsockname())
    command = input("message > ")
    # 将字符串编码为字节对象,使用utf-8编码保证兼容性
    sock.sendall(command.encode('utf-8'))
    reply = sock.recv(1024)
    # 把服务器返回的字节转成字符串,更易读
    print('The server said', repr(reply.decode('utf-8')))
    sock.close()
if __name__ == '__main__':
    client('localhost', 9999)

可选:优化服务器端的输出

如果你想让服务器打印出人类可读的字符串,而不是b'xxx'这种字节形式的输出,可以把服务器接收消息的部分也做解码处理:

# 原服务器代码中的接收行
message = sc.recv(1024)
# 修改为:
message = sc.recv(1024).decode('utf-8')

这样服务器打印的就是用户输入的原始字符串,可读性会更好。

关键知识点

  • 网络套接字在传输数据时只能传递字节,所以字符串必须先通过encode()转成字节,接收方再通过decode()转回字符串。
  • 编码格式要前后统一,客户端用utf-8编码,服务器也要用utf-8解码,避免出现乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:41:44