Socket send() method throws TypeError: a bytes-like object is required, not 'str'
阿新 • • 發佈:2018-09-03
error: ring net peer 函數 搜索 string類型 unicode 區分
python3 socket編程,發送data數據,會遇到需要bytes類型,而不是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()
解決辦法:
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.encode())
data=mysock.recv(1000)
mysock.close()
只需要在string類型的data發送之前encode一下即可,接收也是一樣
before sending message through socket encode it.
sc.send(message.encode())
after receiving decode it:
message.decode()
相關知識:
Python 3最重要的新特性之一是對字符串和二進制數據流做了明確的區分。文本總是Unicode,由str類型表示,二進制數據則由bytes類型表示。Python 3不會以任意隱式的方式混用str和bytes,你不能拼接字符串和字節流,也無法在字節流裏搜索字符串(反之亦然),也不能將字符串傳入參數為字節流的函數(反之亦然)。
參考鏈接:https://www.cnblogs.com/chownjy/p/6625299.html
Socket send() method throws TypeError: a bytes-like object is required, not 'str'