線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1244
推到 Plurk!
推到 Facebook!

DELPHI如何得到本机上INTERNET的IP地址?

答題得分者是:sos_admin
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-28 17:32:13 IP:218.20.xxx.xxx 未訂閱
我知道一个方法:执行外部INTERNET上的一个网页,保存下IP,然后再访问这个保存文件,取得自已的IP。 有没有其它的方法?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-28 17:58:23 IP:61.155.xxx.xxx 未訂閱
DELPHI如何得到本机上INTERNET的IP地址? USES NB30,Winsock; {$R *.dfm} function LocalIP : string; type TaPInAddr = array [0..10] of PInAddr; PaPInAddr = ^TaPInAddr; var phe : PHostEnt; pptr : PaPInAddr; Buffer : array [0..63] of char; I : Integer; GInitData : TWSADATA; begin WSAStartup($101, GInitData); Result := ''; GetHostName(Buffer, SizeOf(Buffer)); phe :=GetHostByName(buffer); if phe = nil then Exit; pptr := PaPInAddr(Phe^.h_addr_list); I := 0; while pptr^[I] <> nil do begin result:=StrPas(inet_ntoa(pptr^[I]^)); Inc(I); end; WSACleanup; end; procedure TForm1.FormCreate(Sender: TObject); begin SHOWMESSAGE(LocalIP); end;
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-28 18:04:30 IP:218.20.xxx.xxx 未訂閱
首先非常感谢sos_admin网页的回答. 可能是我没说清楚, 我的意思是想要得到本网络中的路由(或电脑)拨入INTERNET取得的外部IP. 而不是本地IP.
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-28 18:25:22 IP:61.155.xxx.xxx 未訂閱
在网上找到这个不知道是不是您想要的 [转帖] get the IP-Address bhind a router/proxy? procedure TForm1.Button1Click(Sender: TObject); var IPSTR, IP, HP: string; BeginIP, EndIP, i: integer; begin Button1.Enabled := False; HP :='http://61.136.62.71/cgi-bin/login'; NMHTTP1.Get(HP); IPSTR := NMHTTP1.Body; BeginIP := Pos('BEGINIP', IPSTR) Length('BEGINIP'); EndIP := Pos('ENDIP', IPSTR); IP := ''; for i := BeginIP to ENDip - 1 do begin IP := IP IPstr[i]; end; label1.Caption := IP; Button1.Enabled := True; end;
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-28 18:28:04 IP:61.218.xxx.xxx 未訂閱
aKnightChen 您好:    試試這個看看是不是您要的    資料來源:http://delphi.about.com/library/weekly/aa103100a.htm
uses Winsock;     function GetIPFromHost
(var HostName, IPaddr, WSAErr: string): Boolean; 
type 
  Name = array[0..100] of Char; 
  PName = ^Name; 
var 
  HEnt: pHostEnt; 
  HName: PName; 
  WSAData: TWSAData; 
  i: Integer; 
begin 
  Result := False;     
  if WSAStartup($0101, WSAData) <> 0 then begin 
    WSAErr := 'Winsock is not responding."'; 
    Exit; 
  end; 
  IPaddr := ''; 
  New(HName); 
  if GetHostName(HName^, SizeOf(Name)) = 0 then
  begin 
    HostName := StrPas(HName^); 
    HEnt := GetHostByName(HName^); 
    for i := 0 to HEnt^.h_length - 1 do 
     IPaddr :=
      Concat(IPaddr,
      IntToStr(Ord(HEnt^.h_addr_list^[i]))   '.'); 
    SetLength(IPaddr, Length(IPaddr) - 1); 
    Result := True; 
  end
  else begin 
   case WSAGetLastError of
    WSANOTINITIALISED:WSAErr:='WSANotInitialised'; 
    WSAENETDOWN      :WSAErr:='WSAENetDown'; 
    WSAEINPROGRESS   :WSAErr:='WSAEInProgress'; 
   end; 
  end; 
  Dispose(HName); 
  WSACleanup; 
end;     procedure TForm1.Button1Click(Sender: TObject); 
var 
  Host, IP, Err: string; 
begin 
  if GetIPFromHost(Host, IP, Err) then begin 
    Edit1.Text := Host; 
    Edit2.Text := IP; 
  end 
  else 
    MessageDlg(Err, mtError, [mbOk], 0); 
end; 
/*開心的事情別隱藏在心裡,分享給別人知道會更快樂的*/
/*得到新知識別隱藏在心裡,分享給別人了解會更清楚的*/
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-28 18:28:38 IP:218.20.xxx.xxx 未訂閱
非常谢谢. 不过它也是用我一样的方法. 因为要用到"http://61.136.62.71/cgi-bin/login"--而这个文件是INTERNET. 我想可能没有其它方法.必须上INTERNET了.
系統時間:2024-11-25 16:32:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!