簡體   English   中英

typeError:需要一個類似字節的對象,而不是 Python 3 中的“str”

[英]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))

類型錯誤:需要類似字節的對象,而不是“str”

如果有人可以請幫我解決這個問題。 謝謝你。

您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM