检查远程UDP套接字

时间:2015-04-26 23:41:54

标签: c# .net sockets

我尝试根据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;

1 个答案:

答案 0 :(得分:1)

UDP是一种无连接协议。由于您没有收到错误10054(这是端口关闭的明确指示)但确实得到TimeoutException,您应该假设端口已打开,但远程主机无需发送对你的消息的任何确认。但是,如果路由器或防火墙正在过滤该端口,您还将获得TimeoutException。由于UDP是无连接的,因此无法知道。快速参考:

得到回复? 端口打开。

得到SocketException错误10054? 港口关闭。

得到TimeoutException?如果您和目标之间存在防火墙或NAT路由器,则可以过滤端口(有效关闭)。如果您确定无法过滤UDP流量,则端口打开

另请参阅the Wikipedia page on UDPconnectionless communication