- PR -

IPAdressの生成法

1
投稿者投稿内容
少管閑事
会議室デビュー日: 2003/10/17
投稿数: 8
投稿日時: 2003-10-17 11:46
SUB:固定IPアドレスのTCPインスタンス
固定IP(たとえば192.168.0.32)のIPAddressクラスのインスタンスを新規生成するのは、どうするのが正しいのでしょうか。
ただいまは「IPAdddress ipAdr = IPAddres.Parse("192.168.0.32");」として、とりあえず正常に動作しています。

これをたとえば下記のようにすると・・・
Byte[] ipVal = {192,168,0,32};
IPAddress ipAdr = new IPAddress(ipVal);
「IPアドレスが16個でない」とコンパイラから怒られてしまいます。
ヘルプで見ると、IPAddressの引数はByte×16個である必要があると記されています。(この意味がよくわかりません。なぜ16個なのでしょうか。)

それならと下記のようにすると・・・
Byte[] ipVal = {0,0,0,0,0,0,0,0,0,0,0,0,192,168,0,32};
IPAddress ipAdr = new IPAddress(ipVal);
tcpClient.Connect(ipAdr, 25);
「IPAddress・・・」は通るのですが、その下で「IPアドレスが不正」とコンパイラから怒られてしまいます。
Byte[] ipVal = {192,168,0,32,0,0,0,0,0,0,0,0,0,0,0,0};でも同様です。

生成されたIPアドレスを下記で調べようと試みました。
Byte[] bs = ipAdr.GetAddressBytes();
foreach (Byte b in bs) {
Console.WriteLine(b);
}
するとParseで生成したほうは・・・、
192
168
0
32
とまともに表示されます。それに対してnewで生成したほうは
192
168
0
32
0
0
0
・・・と0×12個が後ろに続きます

Parseで通るのならいいようなものなのですが、なんとなく釈然としません。コンストラクタでちゃんとインスタンスを生成したいと思います。
IPv4クライアントの固定IPAddressを生成するのは、本来どうすべきなのでしょうか。
Hisashi.O
会議室デビュー日: 2003/08/04
投稿数: 7
投稿日時: 2003-10-17 12:17
Parseではなく、コンストラクタにこだわる理由がわかりませんが、
このようにコンストラクタを使い分けることで可能だと思います。

//ipv6
public IPAddress(
byte[] address
);

//ipv4
public IPAddress(
long newAddress
);
少管閑事
会議室デビュー日: 2003/10/17
投稿数: 8
投稿日時: 2003-10-18 07:52
Hisashi.Oさん、レスありがとうございます。
確かにlongを引数としてIPAddressインスタンスを生成すると、うまく動作しました。
試してみたら、左に位置するアドレス値が下位に来るので少し戸惑いました。

byte[]引数IPv6用で、long引数がIPv4用というようなことを、ヘルプで見つけることができないのですが、たぶん当方の捜し方が悪いのだと思います。
1

スキルアップ/キャリアアップ(JOB@IT)