私はPythonを使用しているRaspberryPiのUCI Coursera courseにいます。ソケットsendall()メソッドは型エラーをスローします: '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()を受け取った後にデコードします。 –
ありがとうございます。うまくいくようです –