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

时间:2019-04-26 16:19:03

标签: python sockets byte

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

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 个答案:

答案 0 :(得分:1)

send方法需要一个“类似字节”的对象,看起来您正在尝试传递,但未正确使用bytes函数。

如果您有实际的二进制数据(如您的示例中所示),则可以直接创建bytes对象:

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

如果您有字符串(与Python中的字节不同),则必须将字符串编码为字节。可以使用bytes函数来完成,但是您必须告诉它使用哪种编码。通常使用ASCII或UTF-8。

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