Привязать TCP-сервер к определенному адаптеру
-
19-09-2019 - |
Вопрос
Как я могу указать, с какого адаптера начинать прослушивание?
У меня есть приложение, запущенное на ПК, у которого есть 2 сетевых адаптера, работающих в разных подсетях (одна сеть для инфраструктуры бизнес-локальной сети, одна для камер TCP)
У меня есть класс, который открывает TCP-сервер и прослушивает на определенном порту соединения, поступающие от клиентов в локальной сети.
Проблема в том, что мой класс TCP-сервера инициализируется и начинает прослушивание адаптера, который подключен к камерам.Любой запрос на подключение, поступающий из бизнес-локальной сети, завершается неудачей, он не обрабатывается.
Вопрос в том,, Как я могу указать, с какого адаптера начинать прослушивание?
Приведенный ниже отрывок кода (это не полный класс, а только ключевые методы)
Public Sub New(ByVal Name As String)
'get config
_bootStrap = New TCPServerBootstrap(Name)
'start log file
_Trace = New ACS.Utility.Logging("Connectivity." & Name & ".TcpServer." & _bootStrap.Port)
_Trace.WriteLog("TCP Server Starting")
Dim LocalIP As System.Net.IPAddress = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList(0)
_myListener = New TcpListener(LocalIP, _bootStrap.Port)
_Timer = New System.Timers.Timer
_Timer.Interval = 500
_Timer.Enabled = False
_name = Name
_details = _myListener.LocalEndpoint.ToString
End Sub
Public Sub BeginListening()
'Starts the listener and uses the Asynchronous 'Begin' method to handle inbound connection attempts
_Trace.WriteLog("Begin Listening on: " & _myListener.LocalEndpoint.ToString)
_myListener.Start()
_myListener.BeginAcceptSocket(New AsyncCallback(AddressOf HandleIncomingConnectionRequest), _myListener)
End Sub
Решение
Это зависит от вашего LocalIP
.Вы можете установить для него значение "0.0.0.0" для прослушивания на всех интерфейсах, или вы можете установить его для прослушивания на определенном интерфейсе.
В вашем коде вы устанавливаете его на первый IP-адрес вашего имени хоста.Однако это может не всегда сработать.