Почему не работает сервер?
Имею 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 шт):
В общем то, я написал свои соображения в комментарии к вопросу, но решил оформить всё как ответ.
Если я правильно понял Ваш код, Вы спрашиваете 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. В комментариях накопилось много дополнительной информации и справедливойй критики, я постараюсь переписать ответ, учтя все эти замечания