【问题标题】:message length in python send() similar to send() in Cpython send() 中的消息长度类似于 C 中的 send()
【发布时间】:2020-09-16 15:17:47
【问题描述】:

我正在尝试在 python 中使用套接字和 ssl 发送数据。服务器是用 C 编写的,因此它期望接收:

bytesRx = recv(socket, buffer, sizeof(buffer),0)

所以在 C 中发送函数是:

send(socket, messsage, length, 0)

我想模仿 send 函数,但在 python 中,send() 函数内没有选项来发送消息的长度。只发送消息本身。

secure_socket.send(message)

有没有办法在 python send() 函数中包含消息长度以使服务器满意?

【问题讨论】:

  • 你有证据表明服务器不开心吗?
  • 1) send 系统调用确实NOT 发送消息的长度,该长度仅用于因为内核需要知道要发送的数据的长度。 2)Python的sendsockets方法是send系统调用的更高级别版本,由于可以通过send发送的python对象已经有长度(可以通过len()检索),所以不需要指定它。 - Python 函数将在后台执行适当的send 系统调用,为您添加长度。 3)“让服务器开心”并不意味着什么。如果遇到问题,请出示代码。
  • @MarcoBonelli 感谢您的解释。

标签: c python-3.x sockets ssl openssl


【解决方案1】:

在 Python 中,消息长度是……消息的长度。 Python 字符串有长度,而 C 字符串没有。这就是为什么你需要在 C 中单独指定消息和长度,而不是在 Python 中。

如果你只想发送消息的前 100 个字节,你可以这样写:

secure_socket.send(message[:100])

在 Python 中,message[:100] 表示 message 中的前 100 个内容 - 在这种情况下,我假设 message 是一个字节字符串,因此它表示前 100 个字节。

【讨论】:

  • “Python 消息有长度而 C 消息没有” - C 和 Python 中都不存在消息的概念。
  • @MarcoBonelli 我使用“消息”这个词来明确句子与代码的关系。
猜你喜欢
  • 2019-04-27
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 2011-10-13
  • 2019-07-07
  • 2019-03-14
  • 2019-09-25
相关资源
最近更新 更多