我正在尝试制作一个简单的客户端& 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)
答案 0 :(得分:54)
在python 3中,字节字符串和unicode字符串现在是两种不同的类型。 由于套接字不知道字符串编码,因此它们使用的是原始字节字符串,它与unicode字符串的接口略有不同。
所以,现在,只要你有一个需要用作字节字符串的unicode字符串,你需要encode()
它。当你有一个字节字符串时,你需要decode
它将它用作常规(python 2.x)字符串。
Unicode字符串是引号括起来的字符串。
字节字符串是b""
个包含的字符串