Когда я инициализирую TcpClient
с указанием в конструкторе IPAddress
отличного от 0.0.0.0
(e.g. IPAddress.Any
), то при попытке соединиться с удаленым хостом, происходит исключение:
System.Net.Sockets.SocketException: "Сделана попытка выполнить операцию на сокете при отключенной сети ---.---.---.---:----
У меня включена трассировка сети, вот ее лог:
System.Net.Sockets Verbose: 0 : [3192] Entering DNS::GetHostEntry(ヒミコ)
System.Net.Sockets Verbose: 0 : [3192] Entering DNS::GetHostByName(ヒミコ)
System.Net.Sockets Verbose: 0 : [3192] Exiting DNS::GetHostByName() -> IPHostEntry#21950498
System.Net.Sockets Verbose: 0 : [3192] Exiting DNS::GetHostEntry() -> IPHostEntry#21950498
System.Net.Sockets Verbose: 0 : [3192] Entering TcpClient#37614147::TcpClient(169.254.93.194:6881#-1034034104)
System.Net.Sockets Verbose: 0 : [3192] Entering Socket#35460724::Socket(AddressFamily#2)
System.Net.Sockets Verbose: 0 : [3192] Exiting Socket#35460724::Socket()
System.Net.Sockets Verbose: 0 : [3192] Entering Socket#35460724::Bind(169.254.93.194:6881#-1034034104)
System.Net.Sockets Verbose: 0 : [3192] Exiting Socket#35460724::Bind()
System.Net.Sockets Verbose: 0 : [3192] Exiting TcpClient#37614147::TcpClient()
System.Net.Sockets Verbose: 0 : [3192] Entering TcpClient#37614147::BeginConnect(37.146.57.197#-986082779)
System.Net.Sockets Verbose: 0 : [3192] Entering Socket#35460724::BeginConnect(37.146.57.197#-986082779)
System.Net.Sockets Verbose: 0 : [3192] Entering Socket#35460724::BeginConnect(37.146.57.197:6881#-986085180)
System.Net.Sockets Verbose: 0 : [3192] Entering Socket#35460724::BeginConnectEx()
System.Net.Sockets Verbose: 0 : [3192] Exiting Socket#35460724::BeginConnectEx() -> ConnectOverlappedAsyncResult#65961401
System.Net.Sockets Verbose: 0 : [3192] Exiting Socket#35460724::BeginConnect() -> ConnectOverlappedAsyncResult#65961401
System.Net.Sockets Verbose: 0 : [3192] Exiting TcpClient#37614147::BeginConnect()
System.Net.Sockets Verbose: 0 : [9356] Entering TcpClient#37614147::EndConnect(ConnectOverlappedAsyncResult#65961401)
System.Net.Sockets Verbose: 0 : [9356] Entering Socket#35460724::EndConnect(ConnectOverlappedAsyncResult#65961401)
System.Net.Sockets Verbose: 0 : [9356] Entering Socket#35460724::InternalEndConnect(ConnectOverlappedAsyncResult#65961401)
System.Net.Sockets Error: 0 : [9356] Socket#35460724::UpdateStatusAfterSocketError() - NetworkUnreachable
Я чего-то не до понял, или мне нужно передавать в конструктор сам адрес куда будет идти соединение?
Или как это исправить?
Вы пытаетесь подключится к 169.254.93.194. Это Link-Local адрес - он имеет смысл только в рамках физического сегмента сети - той части LAN, куда воткнут комп с этим адресом.
Пакеты на 169.254.x.x не маршрутизируются, и подключится к нему через интернет (как пытаетесь вы) не получится.
Сокет при попытке открыть такое подключение бросает NetworkUnreachable -
No route to the remote host exists, который в user friendly исключении переведен как "Сделана попытка выполнить операцию на сокете при отключенной сети". На самом деле это просто ошибка роутинга.
Судя по вашим вопросам - вы пытаетесь подключится к пиру, выданному вам трекером. Трекер вполне мог выдать те адреса, которые прислали ему пиры, "как есть", не отфильтровывая заведомо недоступные. Просто учитывайте, что часть адресов может в принципе быть невалидной для подключени извне.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В моем случае нужно, чтоб процедуры P1,P2,P3 могли пересекаться между собой
У меня есть Input Field для ввода названия проекта, мне нужно, чтобы текст в нем обнулялся по нажатию на кнопку "Отмена"Подскажите, пожалуйста, решение...
Как с помощью linq заменить все элементы целочисленной последовательности, заданной с помощью EnumerableRange на сумму их цифр
Имеется таблица с более, чем 3 млн строкПо этой таблице необходимо делать запрос на получение количества строк в определённые временные промежутки...