Python TypeError:需要类似字节的对象,而不是';str';写入文件时

Python TypeError:需要类似字节的对象,而不是';str';写入文件时,python,python-3.x,sockets,Python,Python 3.x,Sockets,当我运行此代码时,行s.sendto(消息,服务器)会导致TypeError:需要类似字节的对象,而不是'str' 如何解决此类问题?我尝试搜索internet,但找不到解决方案。套接字读取和写入字节,而不是字符串(这通常是套接字的属性,不是特定于python的实现选择)。这就是错误的原因 字符串有一个encode()方法将它们转换为字节对象。因此,不要将my_text写入套接字,而是将my_text.encode()写入套接字 类似地,当您读取套接字时,会得到一个类似字节的对象,您可以在该对象

当我运行此代码时,行
s.sendto(消息,服务器)
会导致
TypeError:需要类似字节的对象,而不是'str'


如何解决此类问题?我尝试搜索internet,但找不到解决方案。

套接字读取和写入字节,而不是字符串(这通常是套接字的属性,不是特定于python的实现选择)。这就是错误的原因

字符串有一个
encode()
方法将它们转换为字节对象。因此,不要将
my_text
写入套接字,而是将
my_text.encode()
写入套接字


类似地,当您读取套接字时,会得到一个类似字节的对象,您可以在该对象上调用
input\u message.decode()
,将其转换为字符串套接字读取和写入字节,而不是字符串(这通常是套接字的属性,不是特定于python的实现选择)。这就是错误的原因

字符串有一个
encode()
方法将它们转换为字节对象。因此,不要将
my_text
写入套接字,而是将
my_text.encode()
写入套接字


类似地,当您读取套接字时,会得到一个类似字节的对象,您可以在该对象上调用
input\u message.decode()
将其转换为字符串错误是因为您没有对消息进行编码。 只要改变一下:

import socket

def Main():
    host = '127.0.0.1'
    port = 5001

    server = ('127.0.0.1',5000)

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host, port))

    message = input("-> ")
    while message != 'q':
        s.sendto (message, server)
        data, addr = s.recvfrom(1024)
        print ('Received from server: ' + (data))
        message = input("-> ")
    s.close()

if __name__ == '__main__':
    Main()

在你的代码中

示例:

c.sendto(message.encode(), server)
这将导致错误消息:

为了解决这个问题,我们需要改变:

    c.send(message)
    TypeError: a bytes-like object is required, not 'str'


错误是由于您没有对消息进行编码。 只要改变一下:

import socket

def Main():
    host = '127.0.0.1'
    port = 5001

    server = ('127.0.0.1',5000)

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host, port))

    message = input("-> ")
    while message != 'q':
        s.sendto (message, server)
        data, addr = s.recvfrom(1024)
        print ('Received from server: ' + (data))
        message = input("-> ")
    s.close()

if __name__ == '__main__':
    Main()

在你的代码中

示例:

c.sendto(message.encode(), server)
这将导致错误消息:

为了解决这个问题,我们需要改变:

    c.send(message)
    TypeError: a bytes-like object is required, not 'str'


@scraappy可能重复,这不是一个好的重复目标;所有答案都建议将
b
前置到字符串,但在本例中,字符串来自用户输入,因此不可能前置。显式编码无论如何都更好-如果字符串包含非ascii字符,则前置
b
将不起作用;所有答案都建议将
b
前置到字符串,但在本例中,字符串来自用户输入,因此不可能前置。显式编码无论如何都会更好-如果字符串包含非ascii字符,则前置
b
将不起作用。感谢您的帮助我按照您所说的做了,它解决了问题problem@Firaga:谢谢,如果答案能解决问题,请接受。谢谢你的帮助。我照你说的做了,它解决了问题problem@Firaga:谢谢,如果答案能解决问题,请接受
c.send(message.encode())