我试图创建一个程序,在本地机器上打开一个端口,让其他人通过netcat连接到它。我现在的代码是。
s = socket.socket()
host = '127.0.0.1'
port = 12345
s.bind((host, port))
s.listen(5)
while True:
c, addr = s.accept()
print('Got connection from', addr)
c.send('Thank you for connecting')
c.close()
我是新的Python和套接字。但是当我运行这段代码时,它将允许我发送一个带有命令的netcat连接:
nc 127.0.0.1 12345
但是在我的Python脚本中,我得到了c.send的错误:
TypeError: a bytes-like object is required, not 'str'
我基本上只是尝试打开一个端口,允许netcat连接,并在该机器上安装一个完整的外壳。
您可以将发送行更改为:
c.send(b'Thank you for connecting')
b
将其改为字节。
你可以解码它str与receive.decode('utf_8')
.
出现此错误的原因是,在Python3中,字符串是Unicode,但在网络上传输时,数据需要改为字节。所以有几点建议:
c.sendall()
而不是c.send()
,以防止可能出现的问题,即您可能无法通过一次呼叫发送整个消息(请参阅文档)。'b'
:c.sendall(b'感谢您的连接')
最佳解决方案(2.x和2.x都适用
output = 'Thank you for connecting'
c.sendall(output.encode('utf-8'))
结语/背景:这在Python2中不是问题,因为字符串已经是字节字符串了——您的操作代码将在该环境中完美工作。Unicode字符串在1.6版中添加到Python中
以下是尝试使用套接字修改用户提供的输入的代码: 当我执行它并提供输入时,会发生以下错误: 我能做些什么来解决这个问题?
我得到一个“TypeError:需要一个类似字节的对象,而不是'str'”。我在使用StringIO时遇到了一个错误“TypeError:initial_值必须是str或None,而不是bytes”,我在使用Python 3.7。 我也得到这个函数同样的错误。"返回pickle.load(打开(DATA_FILE))"
问题内容: 几年前,我正在使用一个先前提出的问题的代码,但是,我认为这已经过时了。尝试运行代码,我收到上述错误。我仍然是Python的新手,因此无法从类似的问题中得到很多澄清。有人知道为什么会这样吗? 追溯 问题答案: 默认情况下返回stdout或stderr流的对象。这意味着您还需要在针对这些对象的操作中使用对象。使用对象。使用字节文字(注意前缀): 或先解码数据(如果您知道所使用的编码)(通常
我正在运行一个代码,但这一行出现错误: TypeError:需要一个类似字节的对象,而不是str 这里显示的是类型列表的各个部分,是 TypeError:需要一个类似字节的对象,而不是str
我最近迁移到Python 3.5。此代码在Python 2.7中正常工作: 升级到3.5后,我得到了: TypeError:需要类似字节的对象,而不是'str' 错误在最后一行(模式搜索代码)。 我试过使用函数,并尝试: -没用。 我能够解决几乎所有的Python
我在Python 3.6.5。 当使用日志记录我得到以下错误- TypeError:需要一个类似字节的对象,而不是'str' 它在Python2中运行良好。我还尝试将字符串转换为Byte对象,但无法解决问题 我得到以下错误- Traceback(最近一次调用): File"/home/ec2-user/anaconda3/envs/tensorflow_p36/lib/python3.6/log/