PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
14291 01/01/16 13:42:20 RE(5):WinSockでローカルIPアドレスを取得する方法 By Taka
14288 01/01/16 12:46:50 RE(4):WinSockでローカルIPアドレスを取得する方法 By ryochan
14285 01/01/16 11:41:21 RE(3):WinSockでローカルIPアドレスを取得する方法 By Taka
14284 01/01/16 09:26:23 RE(2):WinSockでローカルIPアドレスを取得する方法 By ryochan
14277 01/01/14 09:15:54 RE(1):WinSockでローカルIPアドレスを取得する方法 By Taka
14263 01/01/11 01:28:34 PB7.0: ローカルIPアドレスをとりたい。 By の?やん

カテゴリ:スクリプトの記述
日付:2001年01月16日 09:26 発信者:ryochan
題名:RE(2):WinSockでローカルIPアドレスを取得する方法

Takaさん、さすがです。

後、もし、IPアドレスが複数割り当てられている場合について
付け足します。

HOSTENTのh_addr_listについて、charと宣言されていますが
この正体はIN_ADDR構造体です。
IN_ADDR構造体は
IPアドレス(long型)配列とホスト名の
共用体で構成されています。
IPアドレスの各値はポインタ演算でシフトして行うのですが、
PB流に直すと、blobで取得して、解析すれば
複数のIPアドレスを列挙する事ができます。

Takaさんが行った方法はh_addr_listにおいて
先頭IPアドレス情報を格納した方法ですね。

ちょっと断片的ですが、その部分のコード
を書きます
blob{80} lb_addr  //h_addr_list格納用
long ll_len //IPアドレス配列のサイズ
string ls_addr[] //IPアドレスリスト
long i,n //カウンタ
・・・
//h_addr_listの第1ポインタの取得までTakaさんと同じ

//h_addr_listをblobに格納
//本当はこれだと他の領域データも引っ張ってしまうけど
//参照のみなので勘弁してください
RtlMoveMemory(lb_addr,p_addr,80) 

//IPアドレス配列部のサイズを取得
ll_len = len(string(lb_addr))-len(nam)

//IPアドレス抽出
for i = 4 to ll_len step 4
 n ++
 //先頭から4バイトずつ抜き取り格納
 ls_addr[n] = String( inet_ntoa(long(blobmid(lb_addr,i - 3,4))),\'address\')
next

→ls_addr[n]にアドレスが格納される。以降Takaさんと同じ

これも同様もっと良いやり方があればお願いします。


付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS (記載なし)
DBMS Oracle SQL*Net 8
Browser (記載なし)

Server SoftWare

OS HP-UX
DBMS Oracle 8.0
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.