如何在C#中接收到UDP消息的ICMP响应“端口不可达”

时间:2013-04-22 20:47:51

标签: c# udp icmp

我正在尝试接收C#中的UDP消息的ICMP响应“端口无法访问”这是我正在尝试做的事情:

IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Parse("192.168.211.133"), 0);
var udpClient = new UdpClient("192.168.211.133", 20);
Byte[] messagebyte = Encoding.Default.GetBytes("hi".ToCharArray());
int s = udpClient.Send(messagebyte, messagebyte.Length);
Byte[] ReceiveBuffer = new Byte[256];
ReceiveBuffer = udpClient.Receive(ref remoteEndpoint); 

但程序仍然停留在

ReceiveBuffer = udpClient.Receive(ref remoteEndpoint);

我做错了什么?

请帮助我!

3 个答案:

答案 0 :(得分:0)

UDP的重点是可能没有响应。经过一段时间后,您需要假设目的地不可读。

看看这个other question

答案 1 :(得分:0)

如果你捕到异常并且SocketErrorCode == SocketError.ConnectionReset,那就意味着你收到“Port unreachable”。

或者,您可以设置套接字使用协议Icmp,如下所示:

Socket icmp = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);

答案 2 :(得分:0)

该地址似乎是我尝试过的问题,如果将其更改为127.0.0.1,则会收到icmp消息