Разобрать вызов функции - C#

Узнай цену своей работы

Формулировка задачи:

 // метод для получения списка устройств
CaptureDeviceList deviceList = CaptureDeviceList.Instance;
// выбираем первое устройство в спсике (для примера)
ICaptureDevice captureDevice = deviceList[0];
// регистрируем событие, которое срабатывает, когда пришел новый пакет
captureDevice.OnPacketArrival += new PacketArrivalEventHandler(Program_OnPacketArrival);
// открываем в режиме promiscuous, поддерживается также нормальный режим
captureDevice.Open(DeviceMode.Promiscuous, 1000);
// начинаем захват пакетов
captureDevice.Capture();

//Теперь в обработчике события device_OnPacketArrival мы можем работать с пакетом:
 
static void Program_OnPacketArrival(object sender, CaptureEventArgs e)
{
// парсинг всего пакета
Packet packet = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
// получение только TCP пакета из всего фрейма
var tcpPacket = TcpPacket.GetEncapsulated(packet);
// получение только IP пакета из всего фрейма
var ipPacket = IpPacket.GetEncapsulated(packet);
if (tcpPacket != null && ipPacket != null)
{
DateTime time = e.Packet.Timeval.Date;
int len = e.Packet.Data.Length;
 
// IP адрес отправителя
var srcIp = ipPacket.SourceAddress.ToString();
// IP адрес получателя
var dstIp = ipPacket.DestinationAddress.ToString();
 
// порт отправителя
var srcPort = tcpPacket.SourcePort.ToString();
// порт получателя
var dstPort = tcpPacket.DestinationPort.ToString();
// данные пакета
var data = tcpPacket.PayloadPacket;
}
}
вот интересующая строчка кода captureDevice.OnPacketArrival += new PacketArrivalEventHandler(Program_OnPacketArrival); Я не могу понять, как вызывается такая функция? Одно дело, если бы она что-то возвращала и было бы как-то так: captureDevice.OnPacketArrival += new PacketArrivalEventHandler(Program_OnPacketArrival(arg1, arg2)); а тут вообще непонятно, что за переменные в неё передаются и как это всё работает. у меня походу проблел в знаниях. можете подсказать в чём дело и где про это подробнее можно прочитать

Решение задачи: «Разобрать вызов функции»

textual
Листинг программы
using System;
using System.Runtime.InteropServices;
 
namespace SharpPcap.LibPcap
{
    /// <summary>
    /// Base class for all pcap devices
    /// </summary>
    public abstract partial class PcapDevice : ICaptureDevice
    {
//---------------------------
//---------------------------
 
        /// <summary>
        /// Notify the OnPacketArrival delegates about a newly captured packet
        /// </summary>
        /// <param name="p">
        /// A <see cref="PacketDotNet.RawPacket"/>
        /// </param>
        protected void SendPacketArrivalEvent(PacketDotNet.RawPacket p)
        {
            var handler = OnPacketArrival;
            if(handler != null )
            {
                //Invoke the packet arrival event
                handler(this, new CaptureEventArgs(p, this));
            }
        }
//---------------------------
//---------------------------
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5