win2003和winxp上socket发送数据包的性能问题--诡异!

wumugulu 2010-11-02 10:18:54

问题表现:

两个应用(vc6程序)在本机通过127.0.0.1(或本机ip)进行socket连接并发送数据包

每个数据包400字节,共计200个数据包,连续发送(每两次发送中间有个Sleep(1))

在服务器(win2003)上,

总共需要耗时3125毫秒左右(非常稳定)

而在开发机器imb T43(winxp)上做同样的测试

耗时为400--700毫秒左右(但在其他测试的winxp系统上测试结果也为3125毫秒左右,也很稳定)


咋回事儿啊这是,没有一点儿头绪,特来求解。。。。。。
...全文
172 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
visualwind 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 f_ky 的回复:]

问题找到了,就是sleep(1)的问题,实际上是空闲了16毫秒,所以。。。。。。


不过接着就带出来两个新问题:

1:同样的sleep(1),我的T43笔记本和自攒pc,以及HP的pcserver会有不同的结果,为啥?

2:如果想要做到sleep(5),得用什么方法呢【需求是比如1秒钟以内必须要运行某几条指令200次】?
[/Quote]

windows的时钟频率大概是15ms,sleep 15ms以下有可能实际的时间是设定的时间至15ms,这个是根据CPU的调度,比较随机。这个在不同硬件平台上可能也有不同。
可以使用queryperformancefrequency和queryperformancecounter函数获得更精确的时间,或者使用多媒体时钟timeSetEvent
另外可参考一下:
http://www.vckbase.com/document/viewdoc/?id=1301
wumugulu 2010-11-05
  • 打赏
  • 举报
回复
问题找到了,就是sleep(1)的问题,实际上是空闲了16毫秒,所以。。。。。。


不过接着就带出来两个新问题:

1:同样的sleep(1),我的T43笔记本和自攒pc,以及HP的pcserver会有不同的结果,为啥?

2:如果想要做到sleep(5),得用什么方法呢【需求是比如1秒钟以内必须要运行某几条指令200次】?
wumugulu 2010-11-04
  • 打赏
  • 举报
回复
我用getsockopt查看了几台机器上的SNDBUF和RCVBUF参数

均为8192;

请继续探讨。。。
mayudong1 2010-11-03
  • 打赏
  • 举报
回复
不知道你的时间是怎么算出来的
不过注意到没有,就是客户端在你的开发机上时就会快
去掉那个sleep吧,没用的
superhanxin5 2010-11-03
  • 打赏
  • 举报
回复
你可以详细的看下recv函数的介绍,里面关于缓冲区的问题
superhanxin5 2010-11-03
  • 打赏
  • 举报
回复
可能跟系统默认设置的缓冲区大小有关系,貌似NTFS格式的和其他格式的不一样
teleinfor 2010-11-02
  • 打赏
  • 举报
回复
我再问一遍:你的socket发送缓冲区设置的是多少?未做特殊设置,也得检查下到底默认的是多少啊。另外去掉你那个没用的sleep函数测试下看。用wireshark抓包看看是否有tcp的重传发生!如果确实有tcp的重传发生,那就说明硬件故障了。
visualwind 2010-11-02
  • 打赏
  • 举报
回复
这种问题的可能的原因也有很多。比如虽然都是Sleep(1),但是这个和机器的时钟频率有关,并不一定是精确的1ms,机器速度快的(比如IBM)这个Sleep(1)的实际时间会少一些。
应该是和机器硬件有关。另外虽然都是winxp,也有可能配置得不一样,当然这个概率比较小。
wumugulu 2010-11-02
  • 打赏
  • 举报
回复
可能我没说清楚:

A机:win2003(pc Server,配置较高),

B机:winxp (pc Server,配置较高),

C机:winxp(IBM T43笔记本,开发用机器)


两个vc开发的socket通讯应用

M:socket通讯的客户端应用

N:socket通讯的服务端应用

测试数据:tcp协议的数据收发,SO_RCVBUFF等系统参数未作特殊设置

400字节的数据包,连续发送200次

测试方法 结果
-------------------------------------------------
客户端M、服务端N同时在A机 速度慢(3125毫秒左右)
客户端M、服务端N同时在B机 速度慢(3125毫秒左右)
客户端M、服务端N同时在C机 ***速度快( 500毫秒左右)
客户端M在A机,服务端N在B机 速度慢(3125毫秒左右)
客户端M在B机,服务端N在A机 速度慢(3125毫秒左右)
客户端M在C机,服务端N在A机 ***速度快( 600毫秒左右)
客户端M在A机,服务端N在C机 暂时无法测试


最终的目标,是需要:客户端M、服务端N同时在A机

so:请明白的兄弟来帮帮忙~~~
teleinfor 2010-11-02
  • 打赏
  • 举报
回复
这个有啥疑问的?你的机器的SO_RCVBUFF设置时多少?是不是一样,网卡的性能是否一致?TCP还是UDP发送,你那个sleep(1)就是个摆设而已,BILL满足不了你的要求。

18,356

社区成员

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

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