Как найти свободный порт

вторник, 21 апреля 2009 г.,

Для работы REST-сервисов требуется базовый адрес(а), например, http://localhost:8888, но бывает, что порт 8888 занят. В таком случае надо найти свободный порт. Сделать это можно следующим методом:

public static int FindFreePort()
{
    // если порт занят, то его нельзя использовать с другим адресом.

    var listerner = from ip in IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners()
            select ip.Port;
    var active = from ip in IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections()
            select ip.LocalEndPoint.Port;
    List<int> ports = new List<int>(listerner.Union(active).Distinct());
    for (int port = 1024; port < 65535; port++)
    {
        if (ports.Contains(port) == false)
            return port;
    }
    return -1;
}


Привилегированные (или зарезервированными) порты: 0 - 1023.
Зарегистрированные порты: 1024 – 49151.
Динамические порты: 49152 – 65535.

1 комментарий:

Cognitex комментирует...

еще один способ здесь