Я делаю проект, я хочу получать ловушки SNMP с устройства (просто, если вы хотите узнать). Я использовал код из этого примера http://www.snmpsharpnet.com/?page_id=117, и я пытаюсь просто настроить функцию barebones из этого. Но то, что я не понимаю здесь:Почему мне нужно определить конечную точку в гнезде дважды, чтобы начать прием данных?
public bool InitializeReceiver()
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
EndPoint localEP = new IPEndPoint(IPAddress.Parse(ip), port);
_socket.Bind(localEP);
if (!RegisterReceiveOperation())
return false;
return true;
}
В этой строке я установить IP-адрес устройства и порта я хочу слушать тоже не так ли?
EndPoint localEP = new IPEndPoint(IPAddress.Parse(ip), port);
А потом здесь
public bool RegisterReceiveOperation()
{
_peerIP = new IPEndPoint(IPAddress.Any, 0);
EndPoint ep = (EndPoint)_peerIP;
_inbuffer = new byte[64 * 1024];
_socket.BeginReceiveFrom(_inbuffer, 0, 64 * 1024,
SocketFlags.None, ref ep, new AsyncCallback(ReceiveCallback), _socket);
return true;
}
Что такое _peerIP? Я установил его в тот же IP-адрес и порт, что и раньше? Или я оставлю это так?
Также, как примечание, исходный код с сайта работает, и я получаю ловушки правильно, но в своем приложении я хочу, чтобы соединение было более управляемым, и я не могу его постоянно проверять. Поэтому, если кто-то сможет прояснить, что такое разные IPEndPoint, это будет здорово.
Примечание 2: Я удалил много попыток и поймал блоки из моего измененного кода, который я опубликовал здесь, и другие материалы, которые, как я думаю, не имеют никакого отношения к этому вопросу.
Спасибо, очень помогло мне понять – Vajura
Следует прямо упомянуть, что если на машине имеется несколько сетевых адаптеров, выбор правильной локальной конечной точки - это необходимость отправки/приема пакетов на конкретном адаптере. Это наиболее распространенный случай, чтобы указать локальную конечную точку. –