Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:str不支持缓冲区接口_Python - Fatal编程技术网

Python TypeError:str不支持缓冲区接口

Python TypeError:str不支持缓冲区接口,python,Python,我试图用python编写一个简单的客户机和服务器消息传递程序,但我一直收到错误“TypeError:‘str’不支持缓冲区接口”,甚至不知道这意味着什么。我在很大程度上是python的初学者,在网络方面是个十足的乞丐 我假设由于某种原因我无法发送字符串数据?如果是这种情况,我将如何发送字符串 作为参考,我从中获得的大部分示例代码是针对Python2.x的,我在Python3中进行了这项工作,因此我认为这是从版本转换中解决的另一个难题。我已经到处寻找相同的问题,但无法真正解决如何将相同的修复应用于

我试图用python编写一个简单的客户机和服务器消息传递程序,但我一直收到错误“TypeError:‘str’不支持缓冲区接口”,甚至不知道这意味着什么。我在很大程度上是python的初学者,在网络方面是个十足的乞丐

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

作为参考,我从中获得的大部分示例代码是针对Python2.x的,我在Python3中进行了这项工作,因此我认为这是从版本转换中解决的另一个难题。我已经到处寻找相同的问题,但无法真正解决如何将相同的修复应用于我的情况

以下是服务器的开始代码:

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)

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

所以,现在,每当您有一个unicode字符串需要用作字节字符串时,您都需要
encode()
它。当您有一个字节字符串时,需要对其进行
解码
以将其用作常规(Python2.x)字符串

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


请参阅。

尝试发送而不仅仅是
数据
。作为旁注:您可以将if语句简化为
if data in('q','q'):
@gsk:或
if data.lower()=“q”:
@gsk:不,对于
data=”“
data=“qQ”
@Morgan是,为什么?我标记它是因为当人们在寻找你问题的解决方案时,看到其他帖子的答案可能也会有所帮助。我也认为重复的问题应该合并。你能给我更多的信息吗?python无法识别encode(数据),如果在使用
client\u socket.send(data)
时使用str.encode(data),我仍然会得到相同的错误,用
client\u socket.send(data.encode())
替换它。当您使用
data=client\u socket.recv(512)
获取数据时,请将其替换为
data=client\u socket.recv(512).decode()
,您应该很好,谢谢!在我第一次进入网络编程领域时,你帮了我的忙。不客气,我喜欢人们转向python3;-)关于encode()和decode()以及何时做我认为pycon 2012谈话非常有用的事情: