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日 11:41 発信者:Taka
題名:RE(3):WinSockでローカルIPアドレスを取得する方法
ryochanさん、さすがです。(^^;
>HOSTENTのh_addr_listについて、charと宣言されていますが
>この正体はIN_ADDR構造体です。
これなんですが、マニュアルには
「ネットワークアドレスを指すポインタからなるNULLで終わる配列」
と書いてありました。この解説どおりに処理しようとしてもまともな結果にならないので
格納フォーマットが良く解らなかったんです。
ryochanさんの解説からすると、
| IP-Addr(1) | IP-Addr(2) | ? | IP-Addr(n) | ホスト名の文字列 |
のように格納されているんですね。勉強になりました。
ほとんどの場合IPアドレスは1個だけだと思うので、単純にダブルポインタ的に
処理すればいいかと思ったのですが、やはりきちんとやったほうが良いのでしょうか...
>//IPアドレス配列部のサイズを取得
>ll_len = len(string(lb_addr))-len(nam)
これなんですが、私の環境では -len(nam) ではダメなようです。
gethostnameで取得した文字列ではなく、HOSTENT構造体.h_nameが指している文字列の長さを
使ってやると、うまくいきました。(ネットワーク環境の設定によって違うのかな?)
「うまくいきました」と言っても、マルチアドレスの設定ではないのでテストできない...
ryochanさんからの情報をもとに調整してみました。
前回の私のレスを、部分的に差替えてください。(^^;
// IPアドレスの取得&文字列に変換(マルチアドレス対応)
ulong p_addr, addr, n
blob{80} addr_buf
string s_addr
RtlMoveMemory( p_addr, host.h_addr_list, 4 )
RtlMoveMemory( addr_buf, p_addr, 80 )
nam = String( host.h_name, \'address\' )
do until( String(addr_buf) = nam )
n ++
addr = Long( BlobMid(addr_buf,1,4) )
s_addr = String( inet_ntoa(addr), \'address\' )
MessageBox( \"IP Address(\" + string(n) + \")\", s_addr )
addr_buf = BlobMid(addr_buf,5)
loop
付加情報:
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.