TypeError:str不支持缓冲区接口

Mor*_*gan 16 python

我正在尝试在python中创建一个简单的客户端和服务器消息传递程序,并且我不断收到错误"TypeError:'str'不支持缓冲区接口"并且甚至不知道这意味着什么.我大部分时间都是python的初学者,还有一个完整的网络连接器.

我假设由于某种原因我无法发送字符串数据?如果是这种情况,我将如何发送字符串?

作为参考,我得到的大部分内容的示例代码是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)
Run Code Online (Sandbox Code Playgroud)

Sch*_*ron 54

在python 3中,字节字符串和unicode字符串现在是两种不同的类型.由于套接字不知道字符串编码,因此它们使用的是原始字节字符串,它与unicode字符串的接口略有不同.

所以,现在,只要你有一个你需要用作字节字符串的unicode字符串,你就需要encode()它.当你有一个字节字符串时,你需要将decode它用作常规(python 2.x)字符串.

Unicode字符串是引号括起来的字符串.字节字符串是b""封闭的字符串

请参阅python 3.0中的新功能.

  • 当你使用`client_socket.send(data)`时,用`client_socket.send(data.encode())`替换它.当你使用`data = client_socket.recv(512)`获取数据时,用`data = client_socket.recv(512).decode()`替换它,你应该没问题 (14认同)
  • 你能再告诉我一些信息吗?python无法识别encode(data),如果我使用str.encode(数据),我仍会得到相同的错误 (2认同)
  • 欢迎你,我喜欢当人们搬到python3 ;-) (2认同)
  • 关于encode()和decode()以及何时做我发现的这个pycon 2012谈话超级有用:http://nedbatchelder.com/text/unipain.html (2认同)