Python套接字发送缓冲区.STR

Bro*_*x97 9 python sockets string send

我想要一个基本的服务器(从Beginning Python复制)发送一个str.

错误:

c.send( "XXX" )
TypeError: must be bytes or buffer, not str
Run Code Online (Sandbox Code Playgroud)

它似乎在酸洗物体时起作用.我发现的所有例子,似乎都能发送字符串没问题.

任何帮助,将不胜感激,

斯蒂芬

import socket  
import pickle  

s = socket.socket()

host = socket.gethostname()

port = 80

s.bind((host, port))

s.listen(5)

while True:  
    c, addr = s.accept()  
    print( "Got Connection From ", addr )  
    data = pickle.dumps(c)  
    c.send( "XXX" )  
    #c.send(data)  
    c.close()
Run Code Online (Sandbox Code Playgroud)

Jac*_*zny 22

您似乎尝试在Python 3中使用Python 2.x示例,并且您遇到了这些Python版本之间的主要差异之一.

对于Python <3'字符串'实际上是二进制字符串,'unicode对象'是正确的文本对象(因为它们可以包含任何Unicode字符).

在Python 3中,unicode字符串是"常规字符串"(str),字节字符串是单独的对象.

低级I/O只能用数据(字节串)而不是文本(字符序列)来完成.对于Python 2.x str也是'二进制数据'类型.在Python 3中它不再是,应该使用一个特殊的"数据"对象.对象被腌制为这样的字节串.如果您想在代码中手动输入它们,请使用"b"前缀(b"XXX"而不是"XXX").


A. *_*evy 12

添加到Jacek Konieczny的答案:您还可以使用str.encode()从字符串中获取字节.如果你有一个变量而不是文字的字符串,你可以调用encode,它将返回一个等效的字节系列.