Почему не работает сервер?

Имею TCP сервер, который работает на порте 11000 ( по-идее должен работать ). На моменте server.Start() происходит ошибка System.Net.Sockets.SocketException: "Требуемый адрес для своего контекста неверен"

Открывал порт, но ничего не помогло. ( П.С Возможно, если это поможет, то делал открытие портов по этому видео: https://www.youtube.com/watch?v=hO6V48GvmSI ( 3 минута видео )

 WebClient webclient = new WebClient();

            string ip = webclient.DownloadString("https://api.ipify.org/");

            int port = Int32.Parse(Console.ReadLine());

            IPAddress ipAddress = IPAddress.Parse(ip);
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, port);

            Console.WriteLine(localEndPoint.Address + ":" + localEndPoint.Port);

            TcpListener server = new TcpListener(localEndPoint);


            try
            {
                server.Start();
            }
            catch (System.Net.Sockets.SocketException)
            {
                Console.WriteLine("Пожалуйста, откройте соответствующий порт, после чего заново запустите сервер. Нажмите любую кнопку для выхода.");
                Console.ReadLine();
                throw new Exception("Порты закрыты.");
            }

Ответы (1 шт):

Автор решения: S.H.

В общем то, я написал свои соображения в комментарии к вопросу, но решил оформить всё как ответ.

Если я правильно понял Ваш код, Вы спрашиваете IP у внешнего сервера. Чему у вас равна переменная ip? По моему, он даёт Вам адрес Вашего компа в интернете, то есть публичный IP. Как правило, этот IP принадлежит роутеру, через котрый происходит "выход в интернет", и к нему нельзя биндиться.

А bind нужно делать к локальному IP - это ip вида 192.168.1.100, например.

Вот такая "кривенькая и косенькая" процедура должна Вам помочь в случае опеределния IP в локальной сети: (правда, если у компа несколько IP, например, на разных интерфейсах - она вернет их все. Тогд - надо взять один из них)

using System.Net;
public string HostIp()
{
    string compIP = string.Empty;
    try
    {
        string myHost = Dns.GetHostName();
        // !!! Здесь есть неточность, реально адреса интранет 172.16.x.x - 172.32.x.x
        foreach (IPAddress ip in Dns.GetHostEntry(myHost).AddressList)
        {
            string ipString = ip.ToString();
            if (ipString.StartsWith("192.168.") || ipString.StartsWith("10.") || ipString.StartsWith("172.16"))
                compIP += string.IsNullOrEmpty(compIP) ? ipString : "; " + ip;
        }
    }
    catch (Exception ex)
    { }
    return compIP;
}

Попробуйте использовать опрделяемый таким образом адрес - ошибка должна исчезнуть. А порт Вы, скорее всего, открыли правильно.

PS. В комментариях накопилось много дополнительной информации и справедливойй критики, я постараюсь переписать ответ, учтя все эти замечания

→ Ссылка