Невозможно установить соединение, потому что целевая машина активно отказалась от него - с помощью Socket или TcpClient - PullRequest
3 голосов
/ 12 ноября 2010

У многих людей такая же проблема, но реализация у всех разная.

Мне нужна помощь с моей реализацией.

void sendUsingTcp() 
{
    try 
    {
        Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(172.16.8.200), 8000);
        sock.Connect(endPoint);
        // code past this never hits because the line above fails
    } 
    catch (SocketException err) 
    {
        MessageBox.Show(err.Message);
    }
}

Я также попробовал TCP-клиент напрямую с такими же результатами ошибки:

void sendUsingTcp() 
{
    try 
    {
        using (TcpClient client = new TcpClient()) 
        {
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(172.16.8.200), 8000);
            client.Connect(endPoint);
            // code past this never hits because the line above fails
        }
    } 
    catch (SocketException err) 
    {
        MessageBox.Show(err.Message);
    }
}

IP-адрес моего компьютера 172.16.11.144.

Ответы [ 5 ]

5 голосов
/ 02 декабря 2015

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

До и неправильно:

IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(172.16.8.200), 8000);

После с исправленной проблемой:

IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 8000);
3 голосов
/ 12 ноября 2010

i) вполне возможно, что порт 8000 используется для чего-то другого. Выберите другое (большое) число и посмотрите, происходит ли то же самое ii) использовать адрес обратной связи для подключения к вашей собственной машине - IPAddress.Loopback

2 голосов
/ 12 ноября 2010

Вы проверили, чтобы убедиться, что порт 8000 открыт на удаленном компьютере?Если это так, это может быть проблема с брандмауэром или даже что-то с сетью.Более подробная информация о том, что работает на удаленном компьютере, поможет.

1 голос
/ 26 ноября 2018

Не уверен, что когда-либо был дан правильный ответ, НО вы не можете использовать TCPClient для настройки прослушивателя - вам нужен класс TCPListener - https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcplistener?redirectedfrom=MSDN&view=netframework-4.7.2

В противном случае вы просто получите исключение при сбое квитирования TCP.

1 голос
/ 20 августа 2013

Обычно проблема в том, что порт закрыт.С другой стороны ничего не слушается.

...