Показаны сообщения с ярлыком TCP/IP. Показать все сообщения
Показаны сообщения с ярлыком TCP/IP. Показать все сообщения

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

пятница, 24 июля 2009 г.,

На codeproject случайно обнаружил способ выявления свободного порта:
public static int FindPort()
{
    IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
    using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
    {
        socket.Bind(endPoint);
        IPEndPoint local = (IPEndPoint)socket.LocalEndPoint;
        return local.Port;
    }
}
Другой способ здесь.

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

вторник, 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.