Я пытаюсь заставить основной сервер (скопированный с Начала 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()
Похоже, вы пытаетесь использовать примеры Python 2.x в Python 3 и обнаруживаете одно из основных различий между этими версиями Python.
Для Python <3 «строки» на самом деле являются двоичными строками, а «объекты Unicode» - это правильные текстовые объекты (поскольку они могут содержать любые символы Unicode).
В Python 3 строки Unicode - это «обычные строки» (str), а байтовые строки - это отдельные объекты.
Ввод-вывод низкого уровня может выполняться только с данными (байтовыми строками), но не текстом (последовательностью символов). Для Python 2.x str также был типом «двоичных данных». В Python 3 этого больше нет, и следует использовать один из специальных объектов «данных». К таким байтовым строкам присоединяются объекты. Если вы хотите ввести их вручную в код, используйте префикс «b» (b «XXX» вместо «XXX»).
В дополнение к ответу Яцека Конецкого: Вы также можете использовать str.encode() для получения байтов из строки. Если строка находится в переменной, а не в литерале, можно вызвать encode, и он вернет эквивалентную серию байтов.