类型错误:写入文件时需要类似字节的对象,而不是“str”

0 python sockets python-3.x

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()
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,该行s.sendto (message, server)会导致TypeError: a bytes-like object is required, not 'str'.

你如何解决这种问题?我尝试在互联网上搜索,但找不到解决方案。

blu*_*ote 5

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

字符串具有encode()将它们转换为字节对象的方法。因此,与其写入my_text,不如写入my_text.encode()您的套接字。

同样,当您读取套接字时,您会得到一个类似字节的对象,您可以调用该对象input_message.decode()将其转换为字符串