阅读:1753回复:6
怎么在大量数据传输的网络中像NETMON一样统计网络中的数据
我用是的DDK的PACKET,在应用层用多线程分析数据(只有一个读线程)还是会丢一半左右的包(一共才5000多个包)。
|
|
沙发#
发布于:2002-10-10 10:46
驱动里面做缓冲呢?
还有,你应用层读是怎么读的?读完一个立马读下一个,还是用Timer去读? |
|
板凳#
发布于:2002-10-10 19:07
循环读,多线程处理.
|
|
地板#
发布于:2002-10-11 21:25
你应该在驱动中用队列实现,保存受到的所有消息,并根据依据应用层传送的buffer大小传送信息
|
|
地下室#
发布于:2002-10-11 21:31
循环读,多线程处理. 你一定是同步读,或者是一次一次的异步读。 其实并不需要用多复杂的技术,只要能够保证在packet的 irp队列一直不空,就基本上不会丢包。因为百M的网出来 这么多年了,cpu速度加快了很多。 |
|
|
5楼#
发布于:2002-10-16 20:49
怎么保证IRP不空?循环读?
不过今天用ICE看输出信息的时候发现注册的一个函数可以在收到包后执行(名字不记得了) |
|
6楼#
发布于:2002-10-17 09:32
怎么保证IRP不空?循环读? 开两个队列 一个是IRP队列 一个是接收数据队列 添加任一一队列时都检查两队列是不是为空 如果两者都不为空,那么就处理数据。 如果其中任一一个为空就等。 触发时机为添加任一一队列时 IRP可以是IRP_MJ_READ,IRP_MJ_DEVICEIOCONTROL 该方面前提条件是使用异步IO 看一下有关SDK READFILE,DEVICEIOCONTROL函数中关于对OVERLAPPER的描述. |
|
|