代码之家  ›  专栏  ›  技术社区  ›  Kyu96

通过python套接字发送字节序列

  •  0
  • Kyu96  · 技术社区  · 5 年前

    我正在尝试编写一个非常基本的服务器(用于实验目的),它监听端口上的传入连接,并在客户端连接时向客户端发送自定义字节序列。但是,我会收到一个类型异常提示:

    TypeError: string argument without an encoding

    import socket
    import sys
    
    HOST = '127.0.0.1'
    PORT = 1337
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    try:
        s.bind((HOST, PORT))
    except socket.error as msg:
        sys.exit()
    
    s.listen(10)
    conn, addr = s.accept()
    print ('Connected with ' + addr[0] + ':' + str(addr[1]))
    s.send(bytes('\x01\x02\x03'))
    s.close()
    

    我是否需要告诉套接字以某种方式将其作为ascii发送,或者我做错了什么?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Mark A    5 年前

    这个 send 方法需要一个“类似字节”的对象,看起来您正在尝试传入该对象,但没有使用 bytes 功能正常。

    如果你有实际的二进制数据,比如在你的例子中,你可以直接创建字节对象:

    s.send(b'\x01\x02\x03')
    

    如果有一个字符串(与Python中的字节不同),那么必须将该字符串编码为字节。这可以通过 字节 函数,但必须告诉它使用什么编码。通常使用ASCII或UTF-8。

    s.send(bytes('Hello world', 'ascii'))
    s.send(bytes('Hello world', 'utf-8'))