2012-11-30 60 views
3

我使用PcapDotNet DLL在我的應用程序,我遇到了一個問題:無法打開文件多次嘗試後

我的應用程序需要一個PCAP文件(Wireshark的文件)和數據包發送給網卡。如果我多次發送一個文件或文件(通常約500次),我的應用程序崩潰,並出現錯誤打開文件失敗C:\ file.pcap。我試圖在項目論壇上提問,但開發人員並不是永久性的,所以也許別人可以幫助我。

錯誤原因是inputCommunicator,當發生錯誤時,此對象值爲空。請注意,這隻發生在幾百次迭代(約500次)之後。

代碼:

using (PacketCommunicator inputCommunicator = selectedInputDevice.Open(65536, PacketDeviceOpenAttributes.Promiscuous, 1000)) 
    { 
     using (mOutputCommunicator = selectedOutputDevice.Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000)) 
     {     
      while (inputCommunicator.ReceivePacket(out packet) == PacketCommunicatorReceiveResult.Ok && _isStop) //fill the buffer with the packets from the file 
      { 
       using (PacketSendBuffer mSendBuffer = new PacketSendBuffer((uint)packet.Length * 4)) 
       {                      
        else if (packet != null) 
        { 
         lastTime = packet.Timestamp; 
         mSendBuffer.Enqueue(packet); //put the packet in the buffer 
        } 

        mOutputCommunicator.Transmit(mSendBuffer, _isBurst); //send the packet 
        _numberOfSendPackets++; 
       } 
      } 
     } 
    } 
+0

您是否每次訪問磁盤上的文件?如果是這樣,是否有一個原因,你爲什麼不通過整個過程記住它?在你的進程正在運行的時候,別的東西有可能試圖訪問這個文件嗎? – CodeWarrior

+0

你能展示更多代碼嗎?例如你如何閱讀文件包內容..?你也正在閱讀這個OffLine ..? – MethodMan

+0

是的,我每次迭代訪問磁盤上的文件,沒有人試圖訪問該文件,而我這樣做,我可以將所有的數據包保存在緩衝區中,但我應該怎麼辦以防萬一我想播放不同的500個文件? – user1710944

回答