【问题标题】:Python Socket Send Buffer Vs. StrPython 套接字发送缓冲区与。力量
【发布时间】:2011-01-25 14:15:14
【问题描述】:

我正在尝试获取一个基本服务器(从Beginning Python 复制)来发送一个str。

错误:

c.send( "XXX" )
TypeError: must be bytes or buffer, not str

腌制物体时似乎可以工作。我找到的所有示例,似乎都可以发送字符串没有问题。

任何帮助将不胜感激,

斯蒂芬

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()

【问题讨论】:

  • 如果您使用的是 Python 3.x,请尝试将 "XXX" 替换为 b"XXX"

标签: python string sockets send


【解决方案1】:

要添加到 Jacek Konieczny 的回答中:您还可以使用 str.encode() 从字符串中获取字节。如果您在变量中包含字符串而不是文字,则可以调用 encode ,它将返回等效的字节序列。

【讨论】:

    【解决方案2】:

    您似乎尝试在 Python 3 中使用 Python 2.x 示例,并且发现了这些 Python 版本之间的主要区别之一。

    对于 Python

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 2013-02-16
      • 2014-05-10
      • 1970-01-01
      • 2010-11-09
      • 2021-03-15
      • 2015-04-28
      相关资源
      最近更新 更多