首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何降低Windows上的TCP连接速度?

如何降低Windows上的TCP连接速度?
EN

Stack Overflow用户
提问于 2010-02-23 10:49:09
回答 5查看 1.1K关注 0票数 4

我正在开发一个Windows代理程序,其中通过不同适配器连接的两个TCP套接字被我的程序桥接。也就是说,我的程序从一个套接字读取并写入另一个套接字,反之亦然。每个套接字都由它自己的线程处理。当一个套接字读取数据时,它会排队等待另一个套接字写入数据。我遇到的问题是,当一个链路以100Mb的速度运行时,另一个链路以10Mb的速度运行。我从100Mb链路读取数据的速度比将数据写入10Mb链路的速度还要快。我如何“减慢”较快的连接速度,使其实质上以较慢的链接速度运行?不能将较快的链路更改为较慢的速度。--谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-23 10:54:55

在读写线程之间创建一个定长队列。当队列已满时阻塞入队,当队列为空时阻塞出队。常规信号量或互斥/条件变量应该可以工作。调整队列大小,使较慢的线程始终处于忙碌状态。

票数 8
EN

Stack Overflow用户

发布于 2010-02-23 10:55:32

如果这是一个问题,那么您编写的程序就是错误的。

在一个10 10mbps的链接上不能超过10 10mbps,所以在较慢的链接上写的线程在你写的时候会开始阻塞。所以,只要你的线程使用与写缓冲区相同大小的读缓冲区,线程就应该尽可能快地消耗数据,并将其抛出10 10mbps的管道。为了防止远程发送者将超过10 10mbps的流量输入到100 10mbps的管道中,所需的任何流量控制都将由TCP协议自动处理。

所以,只要你的读写缓冲区在该线程(或任何线程)中的大小相同,这应该不是问题。

票数 6
EN

Stack Overflow用户

发布于 2010-02-23 10:56:21

当您无法写入数据时,停止读取数据。

有一个字节队列从100Mb/s链路进入你的程序,还有一个从你的程序到10Mb/s链路的队列。当传出队列已满时,停止读取传入队列和TCP,同时调节100Mb/s链路上的客户端。

您可以在读取器和写入器之间使用内部队列来干净地实现这一点。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2315819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档