2011-08-03 20 views
2

私は(かなり単純な:)ネットワーキングアプリケーションを作成しており、localhost:27488127.0.0.1:27488)を使ってテストしています。
接続にSystem.Net.Sockets.TcpClientを使用していますが、ホストを指定するのにSystem.Net.IPAddressが必要です...唯一のことは、正しいIPアドレスでクラスを初期化する方法がわかりません。私はMSDNのドキュメントに行きました、それはByte(4)またはInt64long)のどちらかのアドレスを取ると言います。私はこのようなIPAddressを初期化するとき
probelmは、次のとおりです。System.Net.IPAddress奇妙なアドレスを返す

Dim ipAddr As New System.Net.IPAddress(127001) 

それは25.240.1.0などのアドレスを返します。私がドキュメントから理解しているところから、127001127.0.0.1を返すべきです...多分私はそこに何かを見逃しましたか? http://msdn.microsoft.com/en-us/library/13180abx.aspx

+2

になるのでIPAddress(Byte[4])コンストラクタは何を '12.70.0.1'のIPを思っているならば、ネットワークのために、バイト配列を取ります。それはあまりにも '127001'ではないでしょうか? "_例えば、ビッグエンディアン形式の値0x2414188fは、IPアドレス" 143.24.20.36 "._"の部分となるように、ドキュメントから何かを実際に逃したようです。 – ckittel

+0

良い点...私はそれを得なかったと思う:/ –

答えて

4

短い答え:TcpClient.Connect(文字列、int)を使用して代わりに。 IPv4/IPv6アドレスまたはホスト名/エイリアスを受け入れるため、IPでの接続に限定されません。例えば:

Dim client As TcpClient 
client.Connect("localhost", 27488) 
client.Connect("127.0.0.1", 27488) 

しかし、25.240.1.0から来たのか?試してみてください次:

  • オープンCalcは、4バイトにパッドを左にゼロを追加し、
  • タイプ127001で、その結果を書き出し六角
  • に切り替え
  • 12月を選択し、ビューをプログラマに切り替えます/ 32ビット: 0001F019
  • 独立個々のバイトにその番号:19 F0 01 00
  • は小数点に戻って各バイトを変換:01 00 01 F0 19
  • は、バイト順を逆に
  • ドットで
  • 25.240.1.0

なぜバイトを逆に?お使いのプロセッサアーキテクチャはリトルエンディアンです。数字は最下位バイトを先頭にしてメモリに表示されます。 IPv4アドレスは、ビッグエンディアン形式(最上位バイトが最初に、ネットワーク順序がa.k.a)に標準化されています。 IPAddress(Int64)コンストラクタは、LEからBEに変換するためにバイトを反転しています。

上記の手順を逆にすると、IPAddress(Int64)コンストラクタのループバックの正しい値は、&H0100007F(16進数)または16777343(10進数)になります。

それはあなたの仮定を使用してNew Byte() { 127, 0, 0, 1 }

5

あなたは誤った解釈をしています。 IPアドレスは4バイトで構成され、127.0.0.1は人間が読める形式です。フードの下では、127.0.0.1は((127 << 24) | (0 << 16) | (0 << 8) | 1)と表されます。 IPAddress.Parse方法を試していないのはなぜ

IPAddress.Parse("127.0.0.1");

2

:あなたのケースで は、それだけでこのような.Parse(string)メソッドを使用することが非常に簡単に、より読みやすいでしょうか?

あなたが好きな何かをしたい:

Dim ipAddr as IPAddress = IPAddress.Parse("127.0.0.1")