私はすべてがうまくいくWCFを使って通信するクライアント/サーバースタイルのアプリケーションを持っています。このアプリケーションの1つの機能は、クライアントマシンからサーバーにファイルを取得することです(中央制御)。TCPListenerを外部IPアドレスにバインドする方法はありますか?
セントラルコントロールは、クライアント上の指定されたフォルダにあるファイルのリストを要求し、クライアントが各ファイルに接続してストリームするためにソケットを使用してポートを開きます。各ファイルに異なるポート番号を使用します。
これはローカルでテストするときにうまくいきましたが、私の顧客環境にデプロイしたとき、私は次の例外を得るようになりました。
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()
エンドポイントのIPアドレスは10. です。。*アドレス。私は答えを探そうとしており、一般的な合意は、tcpListenerが外部IPアドレスとバインドできないということでした。私は考えていなかった10. 。。*アドレスは外部であった。次のように
例外をスローするコードは次のとおりです。
tcpListener = New TcpListener(IEndPoint)
Dim handlerSocket As Socket
Dim thdHandler As Thread
tcpListener.Start()
RequestFile()
は、私がこの仕事のためTcpListenerを使用することができます方法はありませんか?そうでない場合はどのような選択肢があり、どのように簡単に代替案を実装するのか。
私たちはファイアウォールの設定に直接アクセスすることはできず、変更には数週間かかることがあります。
「外部」の定義はコンテキストによって大きく異なりますが、あなたが正しいです、10.0.0.1/8はプライベートサブネットとして指定されています。 –