TypeError:需要一个bytes-like对象,而不是'str'

2024-03-28 11:09:55 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是尝试使用套接字修改用户提供的输入的代码:

from socket import *

serverName = '127.0.0.1'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = input('Input lowercase sentence:')
clientSocket.sendto(message,(serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print (modifiedMessage)
clientSocket.close()

当我执行它并提供输入时,会发生以下错误:

Input lowercase sentence:fdsgfdf
Traceback (most recent call last):
  File "C:\srinath files\NETWORKS\UDPclient.py", line 6, in <module>
    clientSocket.sendto(message,(serverName, serverPort))
TypeError: a bytes-like object is required, not 'str'

我能做些什么来解决这个问题?


Tags: 代码用户fromimportmessageinputsocketsentence
3条回答

在Python 3中,编码和解码可以解决这个问题:

客户端:

>>> host='127.0.0.1'
>>> port=1337
>>> import socket
>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
>>> s.connect((host,port))
>>> st='connection done'
>>> byt=st.encode()
>>> s.send(byt)
15
>>>

服务器端:

>>> host=''
>>> port=1337
>>> import socket
>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
>>> s.bind((host,port))
>>> s.listen(1)
>>> conn ,addr=s.accept()
>>> data=conn.recv(2000)
>>> data.decode()
'connection done'
>>>

一点编码可以解决这个问题:

客户端:

message = input("->")
clientSocket.sendto(message.encode('utf-8'), (address, port))

服务器端:

data = s.recv(1024)
modifiedMessage, serverAddress = clientSocket.recvfrom(message.decode('utf-8'))

这段代码可能适合Python 2。但在Python3中,这将导致一个问题,即与位编码相关的问题。我试图制作一个简单的TCP服务器,但遇到了同样的问题。编码对我有效。用sendto命令试试这个。

clientSocket.sendto(message.encode(),(serverName, serverPort))

类似地,如果您想完全按照发送的方式打印数据,则可以使用.decode()在UDP服务器端接收数据。

相关问题 更多 >