Ich habe eine Client/Server-Stil-Anwendung, die mit WCF kommuniziert, die alle gut funktioniert. Eine Funktion der Anwendung besteht darin, Dateien von Client-Rechnern auf den Server zu holen (Central Control).Wie kann ich den TCPListener an eine externe IP-Adresse binden?
Die zentrale Steuerung fordert eine Liste der Dateien in einem angegebenen Ordner auf dem Client an und öffnet einen Port mit Sockets für die Clients, mit denen sie sich verbinden und jede Datei streamen können. Es verwendet für jede Datei eine andere Portnummer.
Dies funktionierte gut beim Testen vor Ort, aber bei der Bereitstellung in unserer Kundenumgebung bekam ich die folgende Ausnahme.
The requested address is not valid in its context
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at System.Net.Sockets.TcpListener.Start(Int32 backlog)
at System.Net.Sockets.TcpListener.Start()
at AMIGA.Library.TransferFile.listenerThread()
Die IP-Adresse im Endpunkt ist ein 10. .. * Adresse. Ich googelte nach einer Antwort und der allgemeine Konsens war, dass mit TCPListener nicht mit einer externen IP-Adresse binden kann. Ich dachte nicht ein 10. .. * Adresse war extern.
Der Code, der die Ausnahme wirft, ist wie folgt:
tcpListener = New TcpListener(IEndPoint)
Dim handlerSocket As Socket
Dim thdHandler As Thread
tcpListener.Start()
RequestFile()
Gibt es keine Möglichkeit, kann ich einen TcpListener für diesen Job verwenden? Welche Alternativen gibt es, wenn nicht und wie einfach wäre es, die Alternativen umzusetzen.
Bedenken Sie, dass wir keinen direkten Zugriff auf die Firewall-Konfiguration haben und eine Änderung einige Wochen dauern kann.
Die Definition von "external" variiert stark abhängig vom Kontext ... aber Sie haben Recht, 10.0.0.1/8 ist als privates Subnetz bezeichnet. –