Как установить время ожидания для асинхронного соединения с TcpClient? - PullRequest
0 голосов
/ 26 сентября 2011

Я смотрел на многочисленные примеры, такие как это , это и это , но ни один из них, похоже, не работает. Я не уверен, что не так, но для каждого примера, который я пробовал, ожидание просто игнорируется, и я получаю стандартное исключение необработанного сокета примерно через 1 секунду, независимо от указанного времени ожидания. No connection could be made because the target machine actively refused it.

Вот выдержка, помогающая понять:

public void Connect(string host, int port)
{
    tcpClient.BeginConnect(host, port, OnConnect, null);
}

private void OnConnect(IAsyncResult async)
{
    tcpClient.EndConnect(async);
}

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

1 Ответ

2 голосов
/ 26 сентября 2011

ошибка

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

обычно означает, что на этом порту на удаленном компьютере ничего не работает, или где-то есть брандмауэр, блокирующий запрос.

есть

tcpClient.SendTimeout

и tcpClient.ReceiveTimeout, чтобы ответить на ваш конкретный вопрос, но, возможно, это не ваша проблема.

...