首页 > 解决方案 > typeError:需要一个类似字节的对象,而不是 Python 3 中的“str”

问题描述

我是 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)时,它让我输入小写字母后出现此错误:

TypeError:需要一个类似字节的对象,而不是第 7 行的“str”,即 clientSocket.sendto(message,(serverName, serverPort))

TypeError:需要一个类似字节的对象,而不是“str”

如果有人可以请帮我解决这个问题。谢谢你。

标签: pythonpython-3.x

解决方案


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

推荐阅读