.NET TcpClient Connect не выбрасывает исключение
TcpClient.Net позволяет мне проверить, можно ли установить соединение, поэтому дайте мне знать, открыт ли удаленный порт.
Проверьте этот код:
TcpClient tcpCLient = new TcpClient();
try
{
tcpCLient.Connect("www.google.com", 80);
Console.WriteLine("Yes");
Console.ReadLine();
}
catch (Exception)
{
Console.WriteLine("No");
Console.ReadLine();
throw;
}
Я тестировал порт Tcp 80 на www.google.com, и поскольку он открыт, я вижу в консоли сообщение "Да". Теперь я попытаюсь закрыть TCP-порт 70 www.google.com, который закрыт.
TcpClient tcpCLient = new TcpClient();
try
{
tcpCLient.Connect("www.google.com", 70);
Console.WriteLine("Yes");
Console.ReadLine();
}
catch (Exception)
{
Console.WriteLine("No");
Console.ReadLine();
throw;
}
Я ожидал исключения, поэтому я смотрю "Нет" в консоли. Почему ничего не происходит? Спасибо!!
Обновление: консоль продолжает работать даже через несколько минут.
@pm100 дайте мне ответ в коммюнике.
"Причина почти наверняка связана с брандмауэром Google, они отбрасывают пакеты для неожиданных портов - это похоже на ошибку tranmission, поэтому вы получаете повторные попытки. Попробуйте тот же тест на машине без брандмауэра (например, localhost), и он будет немедленно сбой из-за хоста отклонить запрос на закрытый порт "
Через несколько минут вы увидите "Нет".
Короче: почему вы throw
исключение, как только поймали его?
Это может быть причиной висячего консольного приложения, поскольку он ждет тайм-аута. Кроме того, как уже упоминалось, это может быть межсетевой экран в удаленном адресе, поскольку он может отменить ваши вызовы. Дайте мне знать, если вы получите некоторые особые исключения.
Кроме того, мы надеемся, что ваш код обрабатывает исключения сокетов, поскольку это является общим исключением, когда клиент пытается подключиться. Вот связанный пост - С# SocketException не попадает