Бвстрая проверка открыт ли порт на определенном IP - C#
Формулировка задачи:
Нужно проверить, открыт ли порт на определенном IP. Раньше делал через System.Net так :
Но дело в том, что таймаута для Connect() не предусмотрено, а мне он очень нужен, т.к. иногда порты бывают закрыты, и в этом случае поток висит ~20 секунд, а это гигантская задержка в рамках моей задачи.
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.ReceiveTimeout = 5; s.SendTimeout = 5; s.Connect(IPs[i], 3389);
Решение задачи: «Бвстрая проверка открыт ли порт на определенном IP»
textual
Листинг программы
static void Main(string[] args)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
int port = 1000; //example
IPEndPoint point = new IPEndPoint(IPAddress.Parse("someaddress"), port);
try
{
socket.Connect(point, TimeSpan.FromSeconds(5));
}
catch (SocketException e)
{
if (e.ErrorCode == 10061)
Console.WriteLine("Port is closed");
else if (e.ErrorCode == 10060)
Console.WriteLine("TimeOut");
else Console.WriteLine(e.Message);
}
}