Bind serveur TCP à un adaptateur spécifique
-
19-09-2019 - |
Question
Comment puis-je spécifier la carte pour commencer à écouter sur?
J'ai une application en cours d'exécution sur un PC qui arrive à avoir 2 cartes réseau en cours d'exécution sur différents sous-réseaux (un réseau d'infrastructure LAN d'affaires, une pour les caméras TCP)
J'ai une classe qui ouvre un serveur TCP et écoute sur un port spécifique pour les connexions venant de clients sur le réseau local.
Le problème est que mes initialise de classe serveur TCP et commence à écouter sur l'adaptateur qui est connecté aux caméras. Toute demande de connexion venant du réseau local d'entreprise tombe en panne, il n'est pas traitée.
La question est, Comment puis-je spécifier la carte pour commencer à écouter sur?
extrait de code ci-dessous (ce n'est pas la classe complète, juste des méthodes clés)
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
La solution
Cela dépend de votre LocalIP
. Vous pouvez le mettre à « 0.0.0.0 » pour écouter sur toutes les interfaces, ou vous pouvez le configurer pour écouter sur une interface spécifique.
Dans votre code, vous définissez à la première adresse IP de votre nom d'hôte. Ce qui ne peut pas toujours fonctionner bien.