我正在做一个项目,我想从设备接收SNMP陷阱(只要您想知道)。我使用了本示例中的代码http://www.snmpsharpnet.com/?page_id=117,并且我正尝试从中设置准系统功能。但是我不明白的是在这里:
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;
}
在这一行,我设置了设备的IpAddress和我想监听的端口?
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?我是否将其设置为与以前相同的IPAddress和端口?还是我就这样离开?
另外请注意,该站点的原始代码可以正常工作,并且我可以正确接收陷阱,但是在我的应用程序中,我希望对连接进行更多的管理,并且我无法一直对其进行真正的测试。因此,如果有人能弄清那些不同的IPEndPoint是什么,那就太好了。
注意2:我从此处发布的修改后的代码中删除了很多try and catch块,并删除了与该问题无关的其他内容。
套接字通信始终涉及两个终结点:本地终结点(您监听的终结点)和远程终结点(您从中接收或连接的终结点)。使用面向无连接的协议(如UDP),无需绑定到本地端点。但是,如果您未明确绑定到特定的本地终结点,则提供程序将自动选择可用的任何终结点。嗯,当您使用本地端点连接到远程主机而不是侦听传入的连接时,面向连接的协议实际上也是如此。
在端点ReceiveFrom
家庭的方法是你所期望的数据来自于端点。如果您愿意接受来自任何端点的数据,则应指定IPAddress.Any
和端口号零。如果提供更特定的端点,则来自其他来源的任何数据都将被静默丢弃,并且仅接收来自指定端点的数据。请注意,该参数是通过引用传递的。返回方法后,该变量将包含从其接收数据的实际端点。
因此,总结一下:您需要定义一个端点两次,因为您同时指定了本地和远程端点。另外,BeginReceiveFrom
如果您事先知道此信息并且希望它永远不会改变(不太可能),则可以很好地在方法中指定远程设备的IP地址和端口号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句