Я использую pcap.net для захвата пакетов. Метод, который захватывает пакеты, запущен в новом потоке. Когда я хочу остановить/возобновить захват, я использую ManualResetEvent, чтобы остановить/возобновить поток.pcap.net коммуникатор буферов пакетов в то время как поток остановлен
он работает нормально, проблема в том, что я разорву захват и запустил его снова (остановка и возобновление потока) - коммуникатор получил пакеты, которые пришли за время остановки потока. Я думаю, что это из-за буфера коммуникатора.
, хочет коммуникатор не получает пакеты, в то время как поток остановлен, и получить пакеты снова, когда поток возобновляются. любая помощь?
Мой код:
#region Members
private PacketCommunicator _Communicator;
private IList<LivePacketDevice> _allDevices;
private PacketDevice selectedDevice;
private Thread captureThread;
private ManualResetEvent _pauseEvent = new ManualResetEvent(true);
#endregion
#region Methods
public PacketGateway()
{
try
{
_allDevices = LivePacketDevice.AllLocalMachine;
selectedDevice = _allDevices[0];
captureThread = new Thread(StartListening);
}
catch (Exception e)
{
throw e;
}
}
// Starts/Resumes the Thread
public void Start()
{
/// Starts the Thread the first time
if (captureThread.ThreadState == ThreadState.Unstarted)
{
_Communicator = selectedDevice.Open();
captureThread.Start();
}
/// Resumes the Thread
if (captureThread.ThreadState == ThreadState.WaitSleepJoin)
{
_pauseEvent.Set();
}
}
public void Stop()
{
/// stop the thread
_pauseEvent.Reset();
}
// Starts to recieve packets
public void StartListening()
{
try
{
_Communicator.ReceivePackets(0, HandlePacket);
}
catch (Exception ex)
{
throw ex;
}
}
// Handles Packet
private void HandlePacket(Packet packet)
{
// some work..
}
#endregion
Спасибо большое!
Спасибо, человек! Это здорово! Так просто.. –