- - PR -
IPAdressの生成法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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を生成するのは、本来どうすべきなのでしょうか。 |
|
投稿日時: 2003-10-17 12:17
Parseではなく、コンストラクタにこだわる理由がわかりませんが、
このようにコンストラクタを使い分けることで可能だと思います。 //ipv6 public IPAddress( byte[] address ); //ipv4 public IPAddress( long newAddress ); |
|
投稿日時: 2003-10-18 07:52
Hisashi.Oさん、レスありがとうございます。
確かにlongを引数としてIPAddressインスタンスを生成すると、うまく動作しました。 試してみたら、左に位置するアドレス値が下位に来るので少し戸惑いました。 byte[]引数IPv6用で、long引数がIPv4用というようなことを、ヘルプで見つけることができないのですが、たぶん当方の捜し方が悪いのだと思います。 |
1