应用程序在从套接字接收信息时停止



SnmpV3使用套接字来获取所需的信息。这是我应该得到的信息,但是(int inlen=socket.ReceiveFrom(inbuffer,SocketFlags.None,ref peer(;申请到此为止。我怎样才能得到这些信息?

// We'll need a byte buffer to store incoming data
byte[] inbuffer = new byte[32 * 1024];
// End point details of the host we received packet(s) from
EndPoint peer = (EndPoint)new IPEndPoint(IPAddress.Any, 0);
// Create a IP/UDP socket
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp);
// Bind the socket to the standard snmptrapd port = udp/162
socket.Bind((EndPoint)new IPEndPoint(IPAddress.Any, 162));
// Wait for a packet
int inlen = socket.ReceiveFrom(inbuffer, SocketFlags.None, ref peer);
// Make sure we received some data instead of an empty packet.
if (inlen== 0 )
{
Console.WriteLine("Received an invalid SNMP packet length 0 Bytes.");
socket.Close();
return;
}

阅读文档。这是一个阻塞操作。这意味着线程的执行将暂停,直到方法返回为止。

如果没有可供读取的数据,ReceiveFrom方法将阻止直到数据可用。如果您处于非阻塞模式,并且在协议堆栈缓冲区中的ReceiveFrom中没有可用的数据方法将立即完成并抛出SocketException。你可以使用"可用"属性可以确定数据是否可用于阅读当Available为非零时,请重试接收操作。

https://learn.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.receivefrom?view=netcore-3.1

为了防止这种情况,您可以在专用后台线程上运行此操作,或者使用套接字类异步方法。

BeginReceiveFrom:

https://learn.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.beginreceivefrom?view=netcore-3.1

ReceiveFromAsync:

https://learn.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.receivefromasync?view=netcore-3.1

最新更新