两台机器通信,使用一发一收的方式,   上位机上 用wrieshark 抓包  和 用自己的程序抓包( 也是调用 WinPcap 驱动, 使用一个线程死循环等待 ) 。   发现一个奇怪的问题:
  
   上位机发一个包下去,下位机发的包能很快的被wrieshark 抓到,但是被自己的程序抓到 要延迟一会,大概是1S, 
     假如下位机持续发包的话,自己的程序得到的相邻包的时间很短。——wrieshark 也是用的WinPcap 驱动, 这就是说WinPcap能很快的抓到包,但是他把抓到的包送到上层的APP, 需要一段时间, 是不是这样呢? 还是我WinPcap 用错了?   
    

解决方案 »

  1.   

    上位机,下位机是什么概念?都是用winpcap捕获包,是你的程序显示出来太慢了!
      

  2.   

    pcap_open(source,snaplen,flags,read-timeout,auth,errbuf);你看看是不是你的read-timeout时间设定的有点长啊?好多例子给的都是1000,这个时间就是1秒。如果想快点,调整成1.
      

  3.   

    不是接收到包就返回,而是无论收到多少包,也要等待这么长的时间才调用一次回调函数。---这个是我绝对能确定的,不信你查libcap的帮助手册。这个参数在接收的时候,发现问题的效果不是很明显。但是如果你用wincap发包的话,效果是相当的明显,如果不修改这个参数,会导致你发包的时候就是1秒才发一个。假设你用wincap做一个转发的东西,会发现你的转发性能慢的出奇--我就是因为这个原因发现的这个问题。
      

  4.   


    read_timeout,:  read timeout in milliseconds. The read timeout is used to arrange that the read not necessarily return immediately when a packet is seen, but that it waits for some amount of time to allow more packets to arrive and to read multiple packets from the OS kernel in one operation. Not all platforms support a read timeout; on platforms that don't, the read timeout is ignored.
      

  5.   

    sorry,对参数的含义我是理解错了。确实如heartofdra3所说。误导误导!!但是下面的问题,我认为还是有可能的。我是这样发现这个问题的原因,是用pacp_sendpacket发送的时候,这个参数非常明显。如果你不相信,你可以写代码实验一下。我当时做的东西是一个TCP劫持程序,模拟服务器端回应假报文。在没有修改这个参数之前,因为慢(就是服务器回应报文比我早)大概占到90%以上,导致我劫持不成功。调整了这个参数之后拦截率几乎在100%。因此,我觉得这个参数的设定可能还是会影响WINCAP调用的效率。也可能不是。因此,我说是这个原因。就是调整个参数,实验一下而已。并不是
      

  6.   

    不是我是直接log 出耗时的,