我尝试根据this question创建UDP端口检查程序,但是当在端口范围1-100上测试(例如)www.google.com时,我会收到每个端口的异常&# 34;连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应"。下面是我测试端口的代码:
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;
答案 0 :(得分:1)
UDP是一种无连接协议。由于您没有收到错误10054(这是端口关闭的明确指示)但确实得到TimeoutException
,您应该假设端口已打开,但远程主机无需发送对你的消息的任何确认。但是,如果路由器或防火墙正在过滤该端口,您还将获得TimeoutException
。由于UDP是无连接的,因此无法知道。快速参考:
得到回复? 端口打开。
得到SocketException
错误10054? 港口关闭。
得到TimeoutException
?如果您和目标之间存在防火墙或NAT路由器,则可以过滤端口(有效关闭)。如果您确定无法过滤UDP流量,则端口打开。