keven007
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2002-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2249回复:8

怎样用Packet提高发送速度?

楼主#
更多 发布于:2002-04-11 09:44
我用Packet例子发包,发现每秒最多只能发100个包,这简直是不可以忍受,各位大侠帮忙,当然是在不增加网卡的情况下提高啊。
发送环境:Windows 2000, 赛杨466,Legend DFE-530TX PCI Fast Ethernet Adapter。
我的目标是10000个包每秒,不知是不是可以达到。
flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-11 11:49
网卡一般支持多包发送,你在应用层上试下异步发送,在应用层上调用WriteFileEx!
当然我以前是在IMD上用过,其实主要是接受速度的问题,真正发送还是很快的!
一剑西来,天外飞仙
keven007
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2002-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-12 12:25
谢谢,我试一下。
keven007
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2002-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-12 13:12
有一个问题,如果连续使用WriteFileEx发送,很多IRP必定会在协议层排队等候处理,会不会出现IRP队列溢出的现象,如果会,如何知道IRP队列已满?先谢了。
wlrwx
驱动小牛
驱动小牛
  • 注册日期2002-04-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望11点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-12 13:59
看你的样子是想做一个路由器或者防火墙测试的东东了,有一个专门的设备来做这个,它是用硬件卡来实现发包的,所以,我觉得你无论如何是无法达到你想要的这个结果的,要不然那个破东西也卖不了10多万USD一台了。
 :P :P :P
真正的浪子―――― 是掠过城市的微风,每个人都能感到他的清新,可没有人能留住...... 亦是划过天际的流星,所有人都能仰望他夺目的光芒,没有人能触及...... 风止于森林,流星损于黄土......非凡浪子归于他的最爱......
flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-12 15:11
有一个问题,如果连续使用WriteFileEx发送,很多IRP必定会在协议层排队等候处理,会不会出现IRP队列溢出的现象,如果会,如何知道IRP队列已满?先谢了。

可以在应用层做个计数器count,连续发送,一直continue,到某个数值如100,而在回调函数进行count--;
另外,我还是坚持发送是非常快的,主要是接受的问题!
一剑西来,天外飞仙
wangzai
驱动牛犊
驱动牛犊
  • 注册日期2002-03-08
  • 最后登录2015-12-21
  • 粉丝2
  • 关注0
  • 积分139分
  • 威望252点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-04-12 21:55
我用过packet发包,在100M的网卡上可以发 13000包/秒,在10M的卡上可以8000-9000包/秒。没有出现任何问题。

DDK里带的例程里有一个Sleep(10)的语句,所以只能100包/秒,去掉就行了!!如果你只要发,不要收是一点都没问题的!!

我是在一个进程里面开一个专门发包的线程,它“死循环”,用一个标志来控制它的终止。
keven007
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2002-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-04-13 16:54
谢谢你的回答。:)
我曾经尝试去掉Sleep(10)发现不能发包,前些天还专门贴个帖子问呢,后来就设成Sleep(0)就行了。不过后来为了控制发包程序,使用了SetTimer,好像是这的问题。
请问你的发包的环境,比如机器CPU,另外和网卡的性能好坏是否有关系?
这道题分给完了,不知能不能再给你加分,我试一下!呵呵。
wangzai
驱动牛犊
驱动牛犊
  • 注册日期2002-03-08
  • 最后登录2015-12-21
  • 粉丝2
  • 关注0
  • 积分139分
  • 威望252点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-04-13 17:35
谢谢你的回答。:)
后来就设成Sleep(0)就行了。
使用了SetTimer,好像是这的问题。
请问你的发包的环境,比如机器CPU,
我试一下!呵呵。


SetTimer在NT下最快是10ms。跟CPU、网卡有关系,但效果不会相差很大。我只发不收,另外一台机器确实收到了我的包。

我在PIII 700,C300,C533的机器上都测试过,速度相差不大。
游客

返回顶部