首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python套接字发送缓冲区Vs。应激

Python套接字发送缓冲区Vs。应激
EN

Stack Overflow用户
提问于 2010-03-10 03:17:39
回答 2查看 25K关注 0票数 9

我正在尝试让一个基本的服务器(从开头的Python复制)来发送一个字符串。

错误:

代码语言:javascript
运行
复制
c.send( "XXX" )
TypeError: must be bytes or buffer, not str

它似乎在酸洗对象时起作用。我找到的所有例子,似乎都能发送一个字符串没有问题。

任何帮助都会很感激,

斯蒂芬

代码语言:javascript
运行
复制
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()
EN

回答 2

Stack Overflow用户

发布于 2010-03-10 03:36:34

似乎您尝试在Python3中使用Python2.x示例,并且您触及了这些Python版本之间的主要区别之一。

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

在Python3中,unicode字符串是“常规字符串”(str),字节字符串是单独的对象。

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

票数 22
EN

Stack Overflow用户

发布于 2010-03-10 03:54:27

补充Jacek Konieczny的答案:您还可以使用str.encode()从字符串中获取字节。如果将字符串放在变量中而不是文字中,则可以调用encode,它将返回等效的一系列字节。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2411864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档