Бвстрая проверка открыт ли порт на определенном IP - C#

Узнай цену своей работы

Формулировка задачи:

Нужно проверить, открыт ли порт на определенном IP. Раньше делал через System.Net так :
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.ReceiveTimeout = 5;
s.SendTimeout = 5;
s.Connect(IPs[i], 3389);
Но дело в том, что таймаута для Connect() не предусмотрено, а мне он очень нужен, т.к. иногда порты бывают закрыты, и в этом случае поток висит ~20 секунд, а это гигантская задержка в рамках моей задачи.

Решение задачи: «Бвстрая проверка открыт ли порт на определенном 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);
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы