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 (記載なし)
Copyright © 2013 Power Future Co., Ltd.