1
패킷을 캡처하는 데 pcap.net을 사용하고 있습니다. 패킷을 캡처하는 메서드가 새 스레드에서 실행 중입니다. 캡처를 중지/다시 시작하려면 ManualResetEvent를 사용하여 스레드를 중지/다시 시작하십시오.pcap.net communicator는 스레드가 중지 된 동안 패킷을 버퍼합니다.
잘 작동하지만 캡처를 중단하고 다시 시작 (스레드 중지 및 다시 시작) 할 때 문제가 발생합니다. 통신자가 스레드가 중지 된 시간에 들어오는 패킷을 받았습니다. 나는 그것 때문에 커뮤니 케이 터의 버퍼의 생각.
스레드가 정지 된 상태 로 의사 소통이 패킷을을 얻을 싶어하고, 스레드가 재개 될 때 다시을 패킷을 얻을 것이다. 어떤 도움이 필요합니까?
내 코드 :
#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
고마워요!
고마워요! 정말 잘됐다! 너무 단순 .. –