Отправить последовательность байтов через сокет Python - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь написать очень простой сервер (для экспериментальных целей), который прослушивает входящие соединения через порт и, когда клиент подключается, отправляет клиенту настраиваемую последовательность байтов. Однако мне предлагается исключение типа:

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 Ответ

1 голос
/ 26 апреля 2019

Для метода send требуется «байтовоподобный» объект, который выглядит так, как будто вы пытаетесь передать, но неправильно используете функцию 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'))
...