2016-06-14 9 views
2

私は、2つのプログラムがTCPソケット上で非同期に通信するシステムを書いています。クライアントはgolangで書かれていますが、サーバーはさまざまです。私は現在C#で1つ書いています。開発中にローカルTCPサーバに使用するアドレスはどれですか?

は、私はクライアントのために

conn, err := net.Dial("tcp", net.JoinHostPort("127.0.0.1", strconv.Itoa(d.port))) 

を使用し、私は、サーバー上:

this.listener = new TcpListener(IPAddress.Parse("127.0.0.1"), port); 

しかし、生産のために、私はすべてのケースでは動作しない場合がありますことを疑います。たとえば、ユーザーがIPv6を使用する可能性があります。私もサーバでlocalhostを試しましたが、Windowsではデフォルトで127.0.0.1と同じではないようです(有効にする必要がありますが、これはオプションではありません)。

ローカルTCPサーバを実行するためのより偽の方法はありますか?すべての場合に有効ですか?

+1

使用127.0.0.1。すべての実用的な目的のために、常に定義されています。 – JimB

答えて

3

IPAddress.Loopbackはあなたが探しているものです。ただし、IPv6用の別のアドレスはまだありますが、 - IPAddress.IPv6Loopbackです。この2つはそれぞれ127.0.0.1::1に対応しています。これはIP標準の一部です。

サーバを他のコンピュータからも利用できるようにする場合は、IPAddress.Any(およびIPv6の場合はIPAddress.IPv6Any)がシステムのすべてのNICにバインドされます。

一般的に、IPv4とIPv6を「ネイティブ」に使用する共通の解決方法はありません。なぜなら、2つのプロトコルは本当に完全に分離されているからです(IPv6ではIPv4のフォールバックを使用しますが、サポートされており、誰も実際に使用していません)。これはローカルホストでは大したことではありませんが、IPAddress.Loopbackをバインドしようとします。失敗した場合はIPAddress.IPv6Loopbackを試してみてください。

関連する問題