17

我正在尝试在 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)
4

1 回答 1

54

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

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

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

请参阅python 3.0 中的新增功能

于 2012-08-02T16:20:16.227 回答