我正在尝试编写一个非常基本的服务器(出于实验目的),该服务器侦听端口上的传入连接,并在客户端连接时向客户端发送自定义字节序列。但是,系统提示我输入类型异常:
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还是我做错了什么?
答案 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'))