我在使用Python的RaspberryPi的UCI Coursera course中。Socket sendall()方法抛出TypeError:需要类似字节的对象,而不是'str'
视频演讲代码似乎有些错误。这是演讲视频的代码,逐字:
import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname("www.google.com")
mysock.connect(host, 80)
message = "GET/HTTP/1.1\r\n\r\n"
mysock.sendall(message)
data=mysock.recv(1000)
mysock.close()
我能解决一个错误,这是.connect()
只需要一个参数,一个元组,所以应该mysock.connect((host, 80))
,而不是mysock.connect(host, 80)
。
但是,示例message
值似乎存在类型错误。当我运行mysock.sendall(message)
它抛出:
TypeError: a bytes-like object is required, not 'str'
我有想象,教师的代码是紧挨是正确的,但有一些小错字在里面,什么的。所以我想弄清楚它们的意思是什么,以及为什么这是不同的,因此将这种类型的错误作为一个字符串引发。
我会在课程中直接跟进,但这个不幸的是没有讨论论坛,所以这里的任何帮助将不胜感激。
'mysock.sendall(message.encode())'或'也许mysock.sendall(B(消息)) '? – Cyclonecode
如何在发送时编码消息:message.encode()并在接收message.decode()后解码。 –
谢谢,是的,似乎工作 –