使用delphi确定您的ip

互联网这个和互联网那个。现在每个人都想上网。现在每个人都想为互联网编程。...

互联网这个和互联网那个。现在每个人都想上网。现在每个人都想为互联网编程。

开始编写internet代码时最有趣的任务之一是如何获取连接到internet的计算机的IP地址。

知识产权?tcp?

简单的技术:互联网是建立在TCP/IP连接之上的。TCP部分描述了两台计算机如何相互建立连接并传输数据。IP部分主要处理如何通过internet路由消息。每台连接的机器都有一个唯一的IP地址,允许其他人找到通往万维网(或世界各地)任何计算机的路径。

使用winsock

要获取连接到internet时使用的计算机的IP地址,我们需要调用Winsock单元中定义的一些API函数。

我们将创建一个GetIPFromHost函数,该函数调用多个Winsock API函数以获取IP。在使用WinSock函数之前,我们必须有一个有效的会话。此会话是使用WinSock WSAStartup函数创建的。在我们的函数结束时,调用SAC leanup以终止Windows Sockets API的使用。要获取计算机的IP地址,必须将GetHostByName与GetHostName结合使用。每台计算机称为主机,我们可以通过一个特殊的函数调用获取主机名:GetHostName。然后,我们使用GetHostByName获取与此主机名相关的IP地址。

获取ip delphi.project.code

启动Delphi并在新创建的表单上放置一个按钮和两个编辑框。将GetIPFromHost函数添加到单元的实现部分,并将以下代码分配给按钮的OnClick事件处理程序(如下所示):

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 thenbegin 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;

  • 发表于 2021-09-04 07:53
  • 阅读 ( 105 )
  • 分类:数学

你可能感兴趣的文章

如何将媒体文件嵌入delphi可执行文件(rc/.res)(embed media files into a delphi executable (rc/.res))

使用声音和动画等多媒体文件的游戏和其他类型的应用程序必须随应用程序一起分发额外的多媒体文件,或者将文件嵌入可执行文件中。 您可以将原始数据作为资源添加到应用程序中,而不是分发单独的文件供应用程序使用...

  • 发布于 2021-09-06 15:08
  • 阅读 ( 195 )

delphi编译器版本指令

如果您计划编写可以与多个版本的Delphi编译器一起使用的Delphi代码,您需要知道您的代码是在哪个版本下编译的。 假设您正在编写自己的商业自定义组件。组件的用户可能具有与您不同的Delphi版本。如果他们试图重新编译组...

  • 发布于 2021-09-06 15:09
  • 阅读 ( 164 )

了解delphi编程的基础知识

...写事件处理程序以使组件协作。 德尔菲帕斯卡 在开始使用Delphi的RAD功能开发更复杂的应用程序之前,您应该学习Delphi Pascal语言的基础知识。此时,您需要开始仔细考虑代码维护,包括代码注释,以及如何清除Delphi代码错误...

  • 发布于 2021-09-06 15:13
  • 阅读 ( 185 )

理解delphi项目和单元源文件

...含可由所有应用程序表单共享的通用源代码信息。 除非使用包含程序图标和版本信息的Windows资源文件(RES),否则无法编译Delphi项目。它还可能包含其他资源,如图像、表格、光标等。RES文件由Delphi自动生成。 注意:以DPR...

  • 发布于 2021-09-06 15:15
  • 阅读 ( 175 )

程序退出时delphi中的内存泄漏通知

...)预期内存泄漏,并在程序关闭时报告意外内存泄漏。 使用Delphi创建WIN32应用程序时,必须确保释放动态创建的所有对象(内存)。 当程序无法释放所消耗的内存时,就会发生内存(或资源)泄漏。 关闭时报告内存泄漏 ...

  • 发布于 2021-09-06 15:15
  • 阅读 ( 168 )

德尔福单元剖析(德尔福初学者版)

...为一名优秀的Delphi程序员,那么“接口”、“实现”和“使用”等词需要在您的编程知识中占有特殊的位置。 德尔福项目 当我们创建一个Delphi应用程序时,我们可以从一个空白项目、一个现有项目或Delphi的一个应用程序或...

  • 发布于 2021-09-10 20:53
  • 阅读 ( 181 )

如何构建没有gui的控制台应用程序(build console applications with no gui)

...程序。 如果您的Delphi版本高于4,那么您所要做的就是使用Console应用程序向导。Delphi5介绍了控制台应用程序向导。您可以通过指向File | New来访问它,这将打开一个新项目对话框-在新页面中选择控制台应用程序。请注意,在Delp...

  • 发布于 2021-09-10 22:34
  • 阅读 ( 251 )

用delphi编写网络感知应用程序

...间的链接。 Delphi套接字组件(Winsock的包装器)简化了使用TCP/IP和相关协议与其他系统通信的应用程序的创建。使用套接字,您可以通过与其他机器的连接进行读写,而无需担心底层网络软件的细节。 Delphi组件工具栏上的inter...

  • 发布于 2021-09-10 23:39
  • 阅读 ( 199 )

理解delphi中的内存分配

...lt := 1 + DoStackOverflow; end; 这个“堆栈”是什么?为什么使用上面的代码会出现溢出? 因此,DoStackOverflow函数递归地调用自己——没有“退出策略”——它只是继续旋转,从不退出。 您可以做的一个快速修复方法是清除明显...

  • 发布于 2021-09-15 03:47
  • 阅读 ( 194 )

从delphi代码执行并运行应用程序和文件

...定会有很多次希望从Delphi代码中执行程序。假设您有一个使用外部备份实用程序的数据库应用程序。备份实用程序从应用程序获取参数并存档数据,而您的程序则等待备份完成。 也许您想打开文件列表框中的文档,只需双击...

  • 发布于 2021-09-15 03:48
  • 阅读 ( 143 )
nntz8523
nntz8523

0 篇文章

相关推荐