自从我开始使用Python 3版本以来,我在通过套接字发送字符串时遇到了很多问题。我知道要在套接字中发送字符串,必须在字符串之前放置'b'
才能将其转换为字节。但是,当我必须将input()
转换为字节时会发生什么?怎么做?
我需要将用键盘编写的消息发送到套接字:
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost",7500))
msg = input()
client.send(msg)
但是,当我尝试时,出现以下错误:
TypeError: a bytes-like object is required, not 'str'
有人可以告诉我如何将input()
转换为字节吗?我一直使用2.7版,但我不明白为什么3版对套接字的处理如此令人讨厌。 :(
答案 0 :(得分:2)
为此,您可以使用
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost",7500))
msg = input()
client.send(msg.encode())
它返回编码为字节对象的字符串。参见str.encode
答案 1 :(得分:2)
您需要encode
这样的消息:
msg = input().encode()
在Python 2中不需要这样做的原因是因为unicode字符串是它们自己的类型,但是是in Python 3 all strings are now unicode by default。