gpt4 book ai didi

python 2.7 socket.send() 通用合约

转载 作者:可可西里 更新时间:2023-11-01 02:49:07 24 4
gpt4 key购买 nike

有人可以向我解释一下 python 的 socket.send() 方法的一般契约吗?作为教育项目的一部分,我正在制作某种流量生成器。

每当 socket.send() 方法执行时,我都会进行简单的日志记录,我会发送一些流量并记下方法完成的时间(除其他外,我会记录)。这些日志显示我发送的消息比 wireshark 显示的多,当我的传出流量相对较高时会发生这种情况。

我读过: https://docs.python.org/2/howto/sockets.html#socket-howto

如我提供的链接中所述:'它们不一定处理您交给它们(或期望从它们那里得到)的所有字节,因为它们的主要重点是处理网络缓冲区。通常,当关联的网络缓冲区已填满(发送)时,它们会返回。

如果我没理解错的话,不能保证我的消息会被准确发送。我可以读取 socket.send() 已处理 的字节数,但我想知道“已处理”究竟意味着什么。

谁能给我解释一下:

  • 我提供的链接中的网络缓冲区是什么(TCP 窗口、我网卡上的某种队列,还是其他什么?)
  • 通俗地说,socket.send() 是如何在 python 中实现的,以便我可以更好地利用它。它如何与我的硬件/操作系统交互?

最佳答案

当您使用 TCP 时,网络层确实保证您传递给 send() 的所有字节都将被实际发送(如果没有,套接字将被关闭)。但是,听起来您在计算数据包而不是字节。

您调用send() 的次数与发送的数据包数之间并不总是有关系。网络层可以自由地将您传递给 send() 的数据合并或拆分为不同大小的数据包,只要所有数据都以与发送时相同的顺序到达远程端。

如果您想更好地控制发送的数据包的数量,请使用 UDP 而不是 TCP。

关于python 2.7 socket.send() 通用合约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23922357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com