我试图基于这个问题创建UDP端口检查器,但是当在端口范围1-100上测试(例如) www.google.com时,我会收到每个端口的异常“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接主机没有响应”。下面是测试端口的代码:
try {
UdpClient udpClient = new UdpClient(Port);
Socket uSocket = udpClient.Client;
uSocket.ReceiveTimeout = 5000;
uSocket.Connect(Adress, Port);
udpClient.Connect(Adress, Port);
IPEndPoint RemoteIpEndPoint = new IPEndPoint(Adress, Port);
Byte[] sendBytes = Encoding.ASCII.GetBytes("?");
udpClient.Send(sendBytes, sendBytes.Length);
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
} catch (SocketException e) {
if (e.ErrorCode == 10054) {
return false;
} else {
return false;
}
}
return true;发布于 2015-04-26 23:52:48
UDP是一种无连接协议。由于您没有收到错误10054 (这是端口关闭的明确指示),但得到了一个TimeoutException,所以您应该假设端口是打开的,但是远程主机只是不关心发送任何确认您的消息。但是,如果路由器或防火墙正在过滤该端口,您也将得到一个TimeoutException。因为UDP是无连接的,所以无法知道。快速参考:
收到回复了吗?端口打开。
有一个错误为10054的SocketException?端口已关闭。
有TimeoutException吗?如果在您和目标之间有防火墙或NAT路由器,端口可能会被过滤(实际上是已关闭的)。如果您确定没有过滤UDP通信量,则端口是open。
也可以参见UDP上的Wikipedia页面或无连接通信。
https://stackoverflow.com/questions/29884988
复制相似问题