Не удается подключиться к новому TCP-клиенту .NET 4: не удалось установить соединение, поскольку целевая машина активно отказывалась - PullRequest
1 голос
/ 22 сентября 2011

У меня простая проблема с .NET 4 Sockets (TcpClient) в win7 и xp.

Я получаю ошибку:

Невозможно установить соединение, потому что целевой компьютер активно отказался от него

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

Я написал и сервер, и клиент (они разговаривают на порте 80 (я также пробовал другие порты, такие как 31000). Больше ничего не работает на порте 80 на моей машине.

Код клиента:

    public void makeConnection()
    {
        string server = ClientStatus.myself.ServerName;
        port = 80;
        ClientStatus.myself.BytesSent = 0.ToString();
        client = new TcpClient(server, port);
        ClientStatus.myself.Connected = "connected";
        stream = client.GetStream();
        bytes = new Byte[1024];
    }

и я подтвердил, что сервер и порт - это то, что я ожидаю. Ошибка возникает на новом TcpClient (сервер, порт), и она вращается в течение примерно 4 секунд, прежде чем происходит ошибка. Я также попытался использовать IP-адрес (127.0.0.1) вместо «myhostname.domain.com» в качестве сервера (альтернативный способ создания клиентского сокета), и он также не работает.

Вот код для сервера, который я написал:

namespace SocketListener { Класс DataListener { публичный статический DataListener сам; TcpListener server = null; Байт [] байт; Порт Int32; IPAddress localAddr; MainWindow w;

    public DataListener(MainWindow caller)
    {
        DataListener.myself = this;
        w = caller;
        Status.myself.Connected = "starting";
        port = 80;
        localAddr = IPAddress.Parse("127.0.0.1");
        server = new TcpListener(localAddr, port); 
        bytes = new Byte[1024];
        server.Start();
    }

    public void acceptLoop()
    {
        TcpClient client;
        while (true)
        {
            // Perform a blocking call to accept requests.
            Status.myself.Connected = "waiting";
            if (server.Pending())
            {
                client = server.AcceptTcpClient();
                Status.myself.Connected = "true";
                Status.myself.BytesReceived = 0.ToString();
                NetworkStream stream = client.GetStream();
                dataLoop(stream);
                client.Close();
            }
            else
            {
                Thread.Sleep(100);
                return;
            }
            // Shutdown and end connection
            Status.myself.Connected = "false";
        }
    }

    public void dataLoop(NetworkStream stream)
    {
        int count = 0;
        int i;
        Status.myself.ByteRate = "0.0";
        Stopwatch watch = new Stopwatch();
        watch.Start();
        while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
        {
            count += i;
            Status.myself.BytesReceived = count.ToString();
        }
        watch.Stop();
        double rate = count / (watch.ElapsedMilliseconds / 1000);
        rate = rate / (1024 * 1024);
        Status.myself.ByteRate = rate.ToString();
    }

    public void shutdown()
    {
        server.Stop();
    }

}

} * * тысяча двадцать-один

1 Ответ

1 голос
/ 01 января 2013

У меня есть win7 box. Поэтому прием входящих соединений блокируется (даже локальный). Ответ:

пробег

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user

см

netsh http add urlacl: добавить резервирование для группы

...