TypeError: str не поддерживает буферный интерфейс - программирование
Подтвердить что ты не робот

TypeError: str не поддерживает буферный интерфейс

Я пытаюсь создать простую клиентскую и серверную программу обмена сообщениями в python, и я продолжаю получать ошибку "TypeError:" str "не поддерживает интерфейс буфера" и даже не знаю, что это значит. Я начинаю с питоном по большей части и полным начинающим с сетью.

Я предполагаю, что по какой-то причине я не могу отправить строковые данные? Если это так, как я могу отправить строку?

Для справки, код примера, который я получил от этого, был для python 2.x, и я делаю это в Python 3, поэтому я считаю, что это еще один изгиб для разработки из перехода версии. Я искал вокруг по той же проблеме, но не могу понять, как применить те же самые исправления к моей ситуации.

Здесь начальный код для сервера:

import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("", 5000))
server_socket.listen(5)

print("TCP Server Waiting for client on port 5000")

while 1:
    client_socket, address = server_socket.accept()
    print("TCP Server received connect from: " + str(address))
    while 1:
        data = input("SEND(Type q or Q to quit):")
        if(data == 'Q' or data == 'q'):
            client_socket.send(data)
            client_socket.close()
            break;
        else:
            client_socket.send(data)
            data = client_socket.recv(512)

        if(data == 'q' or data == 'Q'):
            client_socket.close()
            break;
        else:
            print("Received: " + data)
4b9b3361

Ответ 1

В python 3 строки байтов и строки Unicode теперь представляют собой два разных типа. Так как сокеты не знают строковых кодировок, они используют строки raw bytes, которые имеют немного отличающийся интерфейс от строк unicode.

Итак, теперь, всякий раз, когда у вас есть строка юникода, которую нужно использовать в качестве байтовой строки, вам нужно encode() это. И когда у вас есть байтовая строка, вам нужно decode использовать ее как обычную строку (python 2.x).

Строки Unicode представляют собой заключенные в кавычки строки. Строки байтов b"" заключенные строки

Смотрите Что нового в python 3.0.