С# TCP Socket Client отказывается от соединения

Вот мой сервер

При использовании нескольких различных инструментов проверки портов в Интернете я получаю соединения на своем сервере, демонстрируя, что мои порты открыты.

http://www.infobyip.com/tcpportchecker.php

http://www.yougetsignal.com/tools/open-ports/

http://ping.eu/port-chk/

http://ping.eu/port-chk/

Несколько успешных подключений

static void Main(string[] args)
{
    IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
    IPAddress ipAddress = ipHostInfo.AddressList[0];
    IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 10897);
    Console.WriteLine("Server Start");

    Socket listener = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    listener.Bind(localEndPoint);
    listener.Listen(10);
    while (true)
    {
        Console.WriteLine("Waiting for a connection...");
        Socket handler = listener.Accept();
        Console.WriteLine(handler.RemoteEndPoint);
        handler.Shutdown(SocketShutdown.Both);
        handler.Close();
    }
}

Вот мой клиентский код

 static void Main(string[] args)
 {
     IPEndPoint ip = new IPEndPoint(IPAddress.Parse("MY IP HERE"), 10897);
     Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     server.Connect(ip);
 }

Я получаю эту ошибку каждый раз, я пробовал несколько разных попыток со стороны клиента, используя System.Net.Sockets.TcpClient и сокеты, и каждый раз, когда я получаю отказ в соединении, поэтому, похоже, это какая-то проблема с моим клиентом, поскольку мой сервер получает соединения от средств проверки портов. Ошибка

Я прочитал десятки других тем о сокетах, но все проблемы связаны с сервером, а не с клиентом, я понятия не имею, что не так, может кто-нибудь мне помочь?

РЕДАКТИРОВАТЬ: я могу подключиться через локальный хост (127.0.0.1), но не с моего общедоступного IP-адреса.


person Swololol    schedule 18.05.2016    source источник
comment
Пишет, что сервер активно отказывается от соединения. Это означает, что серверный ПК получает запрос на подключение и отклоняет его до того, как он достигнет уровня приложения. Это пахнет проблемой с брандмауэром. Я знаю, вы сказали, что проверили эти онлайн-приложения, но я предлагаю полностью отключить все имеющиеся у вас брандмауэры и антивирусы, а затем снова запустить тест. Если вы получаете соединение, вы знаете, что это не ваш код, и можете решить проблему с конфигурацией.   -  person William Morrison    schedule 18.05.2016
comment
@William Morrison мой брандмауэр отключен и у меня нет антивируса   -  person Swololol    schedule 18.05.2016
comment
Тогда, возможно, проблема на сетевом уровне (переадресация портов или какой-то брандмауэр на модеме/маршрутизаторе). Попробуйте подключить ваш сервер и проверить, действительно ли вы получаете сообщение TCP SYN?   -  person William Morrison    schedule 18.05.2016


Ответы (4)


Код работает нормально (первые две строки вашего сервера ничего не делают). У вас проблема с брандмауэром или маршрутизацией.

person matt-dot-net    schedule 18.05.2016

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

person Swololol    schedule 18.05.2016

Это как-то связано с исключением брандмауэра Windows. При первом запуске вам должно быть предложено разрешить подключение. Если вы разрешите это в первый раз, в брандмауэре будет создано исключение. Может быть, вы отрицали это. Также попробуйте повысить необходимые привилегии для вашего приложения через app.manifest.

person Peuczynski    schedule 18.05.2016

Кажется, это проблема переадресации/маршрутизации портов. Проверьте, доступен ли перенаправляемый порт, с помощью проверки портов

person geekonweb    schedule 21.09.2019