GetHostName与GetHostByName的使用.
function gethostbyname(name: PAnsiChar): PHostEnt; stdcall; // 通过域名或者主机命返回IP地址. 传进去的参数是一个域名或者主机名.返回值是一个Hostent指针结构.(如果传进去的是一个空字符串,那么返回的是本机的主机名与IP地址)
function gethostname(name: PAnsiChar; len: Integer): Integer; stdcall;// 得到本机主机名或者域名.有两个参数,一个是用来存放主机名或者域名的变量,一个是缓冲区的大小.
PHostEnt在delphi定义如下
type
PHostEnt = ^THostEnt;
{$EXTERNALSYM hostent}
hostent = record
h_name: PChar; //主机名
h_aliases: ^PChar; //别名
h_addrtype: Smallint;
h_length: Smallint;
case Byte of
0: (h_addr_list: ^PChar);
1: (h_addr: ^PChar) //IP地址
end;
THostEnt = hostent;
以下是一个小例子------------------------------------------------------------------------
procedure TForm1.Button2Click(Sender: TObject); var WData: TWSAData; //WSAStartup必须用到的结构类型. HEnt: PHostEnt; ClName, IPad: string; begin WSAStartup(2, WData); // 初始化,第一个参数是Socket的版本,第二个它会在这个结构体中返回WinSock库的一些信息,如版本号,监听队列的大小,你能创建的最多的socket数目,等等。 //Gethostname(PAnsiChar(ClName), 255); 得到本机主机名或者域名. HEnt := GetHostByName(PAnsiChar('www.google.com.hk')); // 通过域名或者主机命返回IP地址. 传进去的参数是一个域名或者主机名.返回值是一个Hostent结构.(如果传进去的是一个空字符串,那么返回的是本机的主机名与IP地址) with HEnt^ do IPad := Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]),Byte(h_addr^[2]), Byte(h_addr^[3])]); //格式化IP地址 Edit1.Text := HEnt^.h_name; // 主机名 Edit2.Text := IPad; // 得到ip WSACleanup; // 释放WSAStartup,一个程序中可以多次调用WSAstartup,但是都必须得即使释放. end; //----------------------------------------------------------------------------------------------- 上面代码执行完之后结果为 Edit1.Text := www-wide.l.google.com; Edit2.Text := 74.125.71.199;
分类:
WinSocket编程入门
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?