Сокет Python отправляет буфер по сравнению с ул.

Я пытаюсь заставить основной сервер (скопированный с Начала Python) отправлять ул.

Ошибка:

c.send( "XXX" )
TypeError: must be bytes or buffer, not str

Это, кажется, работает при солении объекта. Все примеры, которые я нашел, кажись, быть в состоянии не отправить строке проблему.

Любая справка ценилась бы,

Stephen

import socket  
import pickle  

s = socket.socket()

host = socket.gethostname()

port = 80

s.bind((host, port))

s.listen(5)

while True:  
    c, addr = s.accept()  
    print( "Got Connection From ", addr )  
    data = pickle.dumps(c)  
    c.send( "XXX" )  
    #c.send(data)  
    c.close()
9
задан John Kugelman supports Monica 9 March 2010 в 19:19
поделиться

2 ответа

Похоже, вы пытаетесь использовать примеры Python 2.x в Python 3 и обнаруживаете одно из основных различий между этими версиями Python.

Для Python <3 «строки» на самом деле являются двоичными строками, а «объекты Unicode» - это правильные текстовые объекты (поскольку они могут содержать любые символы Unicode).

В Python 3 строки Unicode - это «обычные строки» (str), а байтовые строки - это отдельные объекты.

Ввод-вывод низкого уровня может выполняться только с данными (байтовыми строками), но не текстом (последовательностью символов). Для Python 2.x str также был типом «двоичных данных». В Python 3 этого больше нет, и следует использовать один из специальных объектов «данных». К таким байтовым строкам присоединяются объекты. Если вы хотите ввести их вручную в код, используйте префикс «b» (b «XXX» вместо «XXX»).

22
ответ дан 4 December 2019 в 06:49
поделиться

В дополнение к ответу Яцека Конецкого: Вы также можете использовать str.encode() для получения байтов из строки. Если строка находится в переменной, а не в литерале, можно вызвать encode, и он вернет эквивалентную серию байтов.

12
ответ дан 4 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: