【问题标题】:Getting local IP address in Delphi [duplicate]在Delphi中获取本地IP地址[重复]
【发布时间】:2013-09-21 04:53:28
【问题描述】:

可能重复:
Delphi, How to get all local IPs?

在不使用 3rd-party 组件的情况下,在 Delphi 2009 中获取机器本地 IP 地址的最简单快捷的方法是什么?谢谢。

【问题讨论】:

  • 投票关闭作为stackoverflow.com/questions/576538/…的副本
  • 这显然不是一个重复的问题,因为它指定“不使用 3rd-party 组件”。链接的问题没有,并且没有一个答案使用 Delphi Winsock。此处接受的答案回答了这个特定问题。

标签: delphi winsock


【解决方案1】:

发件人:http://www.scalabium.com/faq/dct0037.htm

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Winsock;

Function GetIPAddress():String;
type
  pu_long = ^u_long;
var
  varTWSAData : TWSAData;
  varPHostEnt : PHostEnt;
  varTInAddr : TInAddr;
  namebuf : Array[0..255] of char;
begin
  If WSAStartup($101,varTWSAData) <> 0 Then
  Result := 'No. IP Address'
  Else Begin
    gethostname(namebuf,sizeof(namebuf));
    varPHostEnt := gethostbyname(namebuf);
    varTInAddr.S_addr := u_long(pu_long(varPHostEnt^.h_addr_list^)^);
    Result := 'IP Address: '+inet_ntoa(varTInAddr);
  End;
  WSACleanup;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := GetIPAddress;
end;

end.

【讨论】:

  • 将 namebuf 类型更改为 ansichar 数组后编译。谢谢!
  • 那么您应该在原始问题中指出您使用的是 Delphi 2009。请记住,有时会根据您使用的 Delphi 版本而有所不同。
  • @Kishor:函数本身只需要 Winsock 单元,无论如何在 D7 中。其他只是添加到表单单元中的常用单元。
  • Ken,他确实表示他使用的是 Delphi 2009。
  • 我不得不将 namebuf 修改为 ansichar,当我关闭我的软件时,它会显示 EAccessViolation。我正在使用 Delphi 10.3
猜你喜欢
  • 2011-05-07
  • 2014-06-01
  • 2013-08-19
  • 2017-02-02
  • 2011-10-11
  • 1970-01-01
  • 2013-12-04
  • 2012-11-29
  • 2011-04-08
相关资源
最近更新 更多