网络开发时,大家是如何控制发包速度的?

Endless_Sad 2012-01-03 11:40:06

for (i=0; i<BLOCKS; i++)//发送指定数量的UDP包
{
ret = sendto(pThis->m_SocketUDPSend, (char *)pThis->m_szBuffer[i], BUFFERSIZE, 0, (SOCKADDR*) &pThis->m_sockaddinUDPSend, sizeof(pThis->m_sockaddinUDPSend));
if (SOCKET_ERROR == ret || ret != BUFFERSIZE)
{
CString sMSG;
sMSG.Format("发送数据失败,错误码:%d", WSAGetLastError());
MYTRACE(sMSG);
break;
}

//Sleep(1);//这里用sleep虽然可以在实际中暂停16ms左右,但发送速度又太低了
}


想了几天了,代码中把sleep换成一个大的循环也可以间接暂停一会儿,但这样一来,CPU占用资源太高,而且总觉得这样很别扭。想问问朋友们:在要求发送速度快,但又不能快到丢包的话,暂停一段时间再发下一个包怎么样好些?先谢谢大家!!
...全文
672 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Endless_Sad 2012-01-08
  • 打赏
  • 举报
回复
To 8楼的huangxiansheng1980朋友:
  谢谢你的回复!我先研究一下WSAAsyncSelect事件模型。因为接收方是嵌入式终端,不能肯定它收的速度能跟得上PC发送的速度,所以才想发一个包,就人为暂停1到2ms再发下一个包。不过你的回答很全面了,也给了我不少思路,真心谢谢!

To 楼上所有朋友:
  感谢大家的参与!结贴了,请大家勿嫌分少,新号分不多,老号密码被重置后,懒得找回了!最后吐槽一下CSDN的管理真烂!
foxavideo 2012-01-05
  • 打赏
  • 举报
回复
1. 你可以用采用socket编程模型的中WSAAsyncSelect事件模型,这样你只要得到上一个包发送完毕的事件就发送下一个。
2. 或者你依然现有的模型,可以再加一个tcp连接,来报告当前丢包率,调整你发送的速度,如果你要可靠传输,就执行重传。
3. 想说明一点,你的16ms不是确定的数字,它会依赖当前的系统所开的线程数。、

另外如果不想做的那么复杂,那么准确,可以几个包,sleep一次。
mayudong1 2012-01-05
  • 打赏
  • 举报
回复
不用每发送一个包后暂停
可以连续发送多个包以后再暂停一会儿
ryu2003 2012-01-05
  • 打赏
  • 举报
回复
你的命题是矛盾的,又想发一个包休息一下,又知道休息的最短时间是16MS,又认为16MS时间太长,那真没办法了,自己把自己堵死了
Endless_Sad 2012-01-05
  • 打赏
  • 举报
回复
To 四楼朋友:

定时器的最小时间间隔16ms太长了,以致我的发送速度达不到要求的500K/s啊。
hunter0395 2012-01-04
  • 打赏
  • 举报
回复
做个定时器吧
Endless_Sad 2012-01-04
  • 打赏
  • 举报
回复
To 一楼朋友:
就是因为定时器的最小时间单位是16ms,这个时间太长了。导致的结果和用Sleep(1)的结果一样,发送速度达不到我要求的。

To 二楼朋友:
每个包发送后都得想法子让系统暂停一段时间再发下一个包,不然包与包之间太快了就会丢包的。
ystemni 2012-01-04
  • 打赏
  • 举报
回复
if(0 == i%50) Sleep(1);
keith_cheung 2012-01-04
  • 打赏
  • 举报
回复
做一个定时器呢?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧