[英]typeError: a byte-like object is required, not 'str' in Python 3
我是 python 的新手,我正在嘗試一些東西。 我正在嘗試使用 python 套接字在 python3 中解決這個 UDP 客戶端和服務器程序。
我的名為 UDpserver.py 的 UDP 服務器程序的目標如下:
名為 UDpclient.py 的客戶端程序的目標連接到上述服務器並接收來自服務器的響應:
以下是服務器程序的代碼(UDpserver.py):
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))
print (“The server is ready to receive”)
while 1:
message, clientAddress = serverSocket.recvfrom(2048)
modifiedMessage = message.upper()
serverSocket.sendto(modifiedMessage, clientAddress)
以下是客戶端程序代碼(UDpclient.py)
import socket
serverName = ‘hostname’
serverPort = 12000
clientSocket = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)
message = input(’Input lowercase sentence:’)
clientSocket.sendto(message,(serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print modifiedMessage
clientSocket.close()
當我運行客戶端程序(Udpclient.py)時,它讓我輸入小寫字母后出現此錯誤:
類型錯誤:需要一個類似字節的對象,而不是第 7 行的“str” ,即 clientSocket.sendto(message,(serverName, serverPort))
如果有人可以請幫我解決這個問題。 謝謝你。
您可以使用message.encode()
對字符串類型消息進行編碼。 所以這就是你的UDPclient.py
樣子:
import socket
serverName = ‘hostname’
serverPort = 12000
clientSocket = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)
message = input(’Input lowercase sentence:’)
clientSocket.sendto(message.encode(),(serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print modifiedMessage
clientSocket.close()
Python 3 字符串完全支持 unicode 規范。 在網絡上發送之前,內存中的字符串必須以某種方式序列化以符合某種編碼,例如 ASCII、UTF-8、各種 Windows 代碼頁等。 sendto
需要一個已經編碼的字節字符串。
由於您在機器之間傳輸數據,讓每個機器選擇自己的編碼並不是一個好主意。 自主開發協議的最簡單選項是聲明您將使用 UTF-8,這是最具互操作性的 unicode 編碼。
clientSocket.sendto(message.encode("utf-8"),(serverName, serverPort))
接收器將使用相同的編碼進行解碼。
將“主機名”更改為實際 IP 並使用以下命令更新錯誤代碼后解決了該問題
clientSocket.sendto(message.encode(),(serverName, serverPort))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.