c++ - 如何在 C 中限制套接字连接的带宽?

标签 c++ c sockets network-programming

我正在使用 BSD 套接字编写客户端-服务器应用程序。它需要在后台运行,不断传输数据,但不能占用正常使用的网络接口(interface)带宽。根据接口(interface)的速度,我需要将此连接限制到某个最大传输速率。

以编程方式实现这一目标的最佳方法是什么?

最佳答案

在每次传输后持续休眠 1 秒的问题是您的网络性能会不稳定。

令 BandwidthMaxThreshold 为所需的带宽阈值。

令 TransferRate 为连接的当前传输速率。

那么……

如果您检测到您的 TransferRate > BandwidthMaxThreshold 然后您执行 SleepTime = 1 + SleepTime * 1.02(将 sleep 时间增加 2%)

在每次网络操作之前​​或之后做一个 sleep ( sleep 时间)

如果您检测到您的 TransferRate 比您的 BandwidthMaxThreshold 低很多,您可以减少您的 SleepTime。或者,您可以始终随着时间的推移衰减/减少您的 sleep 时间。最终,您的 SleepTime 将再次达到 0。

除了增加 2% 之外,您还可以将 TransferRate - BandwidthMaxThreshold 之间的差值线性增加较大。

这个解决方案很好,因为如果用户的网络已经没有你想要的那么高,你将没有 sleep 。

关于c++ - 如何在 C 中限制套接字连接的带宽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/235762/

相关文章:

perl - 在Perl中使用sockaddr_in()导致此使用错误的原因是什么?

python - 在python中的不同LAN之间发送数据

c++ - 如何获取我当前正在使用 Clang 访问的文件的名称?

c++ - 从枚举定义中删除依赖常量

检查工作 C 编译器 :/usr/bin/cc -- broken

c - __m128 中至少有 4 个 SP 值

c++ - 缺少对指向成员函数的绑定(bind)指针的调用

c++ - 将私有(private)数据成员作为默认参数传递给该类的公共(public)方法时出错

c - 3x3 数组 = 10 个数字

c# - 使用 C# 进行套接字编程