【发布时间】:2017-11-04 19:16:20
【问题描述】:
我在使用 Python 的 RaspberryPi 上的 UCI Coursera course。
视频讲座的代码似乎有一些错误。这是讲座视频中的代码,逐字逐句:
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: 需要一个类似字节的对象,而不是 'str'
我不得不想象讲师的代码几乎是正确的,但其中有一些小错字,或者其他什么。所以我试图弄清楚他们要写什么以及为什么这是不同的,因此会将此类型错误作为字符串抛出。
我会直接在课程中跟进,但很遗憾,这个课程没有讨论论坛,因此我们将不胜感激。
【问题讨论】:
-
mysock.sendall(message.encode())或者mysock.sendall(b(message))? -
发送时如何编码消息:message.encode() 并在接收到 message.decode() 后对其进行解码。
-
谢谢,是的,这似乎有效
-
很可能课程材料假定使用python2,而您使用的是python3。您确实应该根据需要使用 python2 或 3 标记您的问题。
-
他使用 3;我添加了一个标签谢谢
标签: python python-3.x sockets