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
相关产品推荐
相关产品推荐

