Страницы

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

суббота, 14 декабря 2019 г.

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

#python #сокет #python_3x


Собственно, ошибка: 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()


Я этот пример вообще списал, т.к только-только (буквально пару минут назад) начал
изучение сокетов, а тут такое.
    


Ответы

Ответ 1



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

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

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