Страницы

Поиск по вопросам

вторник, 13 ноября 2018 г.

Ошибка при подключении сокета к серверу: a bytes-like object is required, not 'str'

Собственно, ошибка: TypeError:
a bytes-like object is required, not 'str'
Ошибка в строке " sock.send('Hello, World") "
Ошибка нашлась в приложении клиента, вот собственно код клиента:
import socket
sock = socket.socket() sock.connect(('localhost', 9090)) sock.send('hello, world!')
data = sock.recv(1024) sock.close()
print(data)
Вот код сервера:
import socket
sock = socket.socket() sock.bind(('', 9090)) sock.listen(1) conn, addr = sock.accept()
print('connected:', addr)
while True: data = conn.recv(1024) if not data: break conn.send(data.upper())
conn.close()
Я этот пример вообще списал, т.к только-только (буквально пару минут назад) начал изучение сокетов, а тут такое.


Ответ

Метод socket.send ожидает последовательность байтов, а не строку. Чтобы преобразовать строку в последовательность байтов, можно воспользоваться методом str.encode
sock.send("hello, world!".encode())
Аналогично, если вы хотите получить не последовательность байтов, а строку, то можно воспользоваться методом str.decode
data = sock.recv(1024).decode()
По умолчанию в качестве кодировки будет использован UTF-8.

Комментариев нет:

Отправить комментарий