什么影响了sendto()的性能

internet91 2012-12-22 11:30:10
for (int i=0; i<fileBlockNumber; i++) {

sendto( System::udpSocket, msgData, msgLength, 0, (sockaddr*)&remoteaddr, sizeof(remoteaddr) );

}

我发送144M文件,循环发送,每次1K。如果向本机发送,使用sendto()语句,花了7秒,而注释调sendto语句,则只用了3秒。

如果我向局域网内的一台机器发送,使用sendto()语句,花了50秒左右,也就是每秒2M(这里是发送,而不是接收,所以估计有问题),而注释调sendto语句,则只用了3秒左右。

也就是只要注释调sendto()性能就大幅度提示,那么估计问题就出现在sendto()上了。

请问怎么提高sendto()性能。

...全文
917 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
UDX协议 2012-12-26
  • 打赏
  • 举报
回复
有接收的时候,会快一点。
internet91 2012-12-25
  • 打赏
  • 举报
回复
问题补充: 使用UDP发送才2M/s,而且只是发送,不考虑接收端是否接收到,所以速度太慢了。而我用TCP发送却可以达到8M/s,不是说UDP更快吗,所以应该有改进的方法。我设置了缓存,效果也不佳。
blowlow 2012-12-25
  • 打赏
  • 举报
回复
TCP发送,数据在发送到网卡前会自动组包的,这样能够优化效率。 UDP发送的话,你要以MTU的大小来发送,绝对比TCP发送快!
你妹的特盗不 2012-12-25
  • 打赏
  • 举报
回复
建议不要使用一个线程发送. 采用多线程,还有发送包的大小选择,也很关键.
Joseph-Growth 2012-12-24
  • 打赏
  • 举报
回复
我想你说了些fh。你想提高sendto的效率,这里我有一个问题,如果你解决的话,可以继续下面的解答。用sendto发送的144M数据内容,你接收的时候,按照编号重新排列了吗?考虑一下udp可是不可靠传输。不然你接收的包也是毫无意义的呀! 再说你的问题,sendto的效率要考虑到很多问题,比如说缓冲区大小,理论上有个阀值,阀值附近时是传输的上限,这个阀值根据具体环境而定,跟系统和网络I/0紧密相关。
zzz_zou 2012-12-24
  • 打赏
  • 举报
回复
注释掉sendto语句和没注释掉差别未免也太大了吧,注释掉了你就不会发送了啊。和发送比较没什么意义啊。 我觉得提高sendto的性能,可以尝试一次发送的数据大一点。
xuggzu 2012-12-22
  • 打赏
  • 举报
回复
如果lz单纯的想提高数据发送效率,我想首先应该修改的是一次发送的数据包的大小,因为它与网络带宽有直接的关系。

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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