小试牛刀--编程实现获取计算机的IP地址和计算机名

1.2.3  小试牛刀--编程实现获取计算机的IP地址和计算机名(1)

实例功能 获取当前计算机的IP地址和计算机名

源码路径 光盘\yuanma\1\IP

本实例的目的是,使用Visual C++ 6.0开发一个获取当前机器的IP地址和计算机名的应用程序。

1. 设计MFC窗体

使用Visual C++ 6.0创建一个MFC项目后,根据本实例的需要设计两个窗体,分别是IDD_ABOUTBOX窗体(见图1-12)和IDD_IPADDRESS_DIALOG窗体(见图1-13)。

 
图1-12  IDD_ABOUTBOX窗体
 
图1-13  IDD_IPADDRESS_DIALOG窗体

2. 具体编码

设计好窗体之后,接下来开始讲解具体编码过程。

(1) 在文件IPAddressDlg.cpp中实现初始化对话框,使用对话框形式显示获取的IP地址和计算机名。具体代码如下:

  1. BOOL CIPAddressDlg::OnInitDialog()
  2. {
  3. CDialog::OnInitDialog();
  4. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  5. ASSERT(IDM_ABOUTBOX < 0xF000);
  6. CMenu *pSysMenu = GetSystemMenu(FALSE);
  7. if (pSysMenu != NULL)
  8. {
  9. CString strAboutMenu;
  10. strAboutMenu.LoadString(IDS_ABOUTBOX);
  11. if (!strAboutMenu.IsEmpty())
  12. {
  13. pSysMenu->AppendMenu(MF_SEPARATOR);
  14. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  15. }
  16. }
  17. // 设置对话框图标
  18. SetIcon(m_hIcon, TRUE);                     // 设置大图标
  19. SetIcon(m_hIcon, FALSE);                        // 设置小图标
  20. int nRetCode;
  21. nRetCode = StartUp();
  22. TRACE1("StartUp RetCode: %d\n", nRetCode);
  23. nRetCode = GetLocalHostName(m_sHostName);
  24. TRACE1("GetLocalHostName RetCode: %d\n", nRetCode);
  25. nRetCode = GetIPAddress(m_sHostName, m_sIPAddress);
  26. TRACE1("GetIPAddress RetCode: %d\n", nRetCode);
  27. nRetCode = CleanUp();
  28. TRACE1("CleanUp RetCode: %d\n", nRetCode);
  29. UpdateData(FALSE);
  30. return TRUE;
  31. }
  32. void CIPAddressDlg::OnSysCommand(UINT nID, LPARAM lParam)
  33. {
  34. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  35. {
  36. CAboutDlg dlgAbout;
  37. dlgAbout.DoModal();
  38. }
  39. else
  40. {
  41. CDialog::OnSysCommand(nID, lParam);
  42. }
  43. }
  44. void CIPAddressDlg::OnPaint()
  45. {
  46. if (IsIconic())
  47. {
  48. CPaintDC dc(this); // device context for painting
  49. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  50. int cxIcon = GetSystemMetrics(SM_CXICON);
  51. int cyIcon = GetSystemMetrics(SM_CYICON);
  52. CRect rect;
  53. GetClientRect(&rect);
  54. int x = (rect.Width() - cxIcon + 1) / 2;
  55. int y = (rect.Height() - cyIcon + 1) / 2;
  56. dc.DrawIcon(x, y, m_hIcon);
  57. }
  58. else
  59. {
  60. CDialog::OnPaint();
  61. }
  62. }

(2) 在文件IPAddressDlg.cpp中编写函数GetLocalHostName()获取机器名,调用函数GetIPAddress()获取机器的IP地址。具体代码如下:

  1. int CIPAddressDlg::GetLocalHostName(CString &sHostName)
  2. {
  3. char szHostName[256];
  4. int  nRetCode;
  5. nRetCode = gethostname(szHostName, sizeof(szHostName));
  6. if (nRetCode != 0) {
  7. sHostName = _T("Not available");;
  8. return WSAGetLastError();
  9. }
  10. sHostName = szHostName;
  11. return 0;
  12. }
  13. int CIPAddressDlg::GetIPAddress(const CString &sHostName,
  14. CString &sIPAddress)
  15. {
  16. struct hostent FAR *lpHostEnt = gethostbyname(sHostName);
  17. if (lpHostEnt == NULL) {
  18. sIPAddress = _T("");
  19. return WSAGetLastError();
  20. }
  21. LPSTR lpAddr = lpHostEnt->h_addr_list[0];
  22. if (lpAddr) {
  23. struct in_addr  inAddr;
  24. memmove(&inAddr, lpAddr, 4);
  25. sIPAddress = inet_ntoa(inAddr);
  26. if (sIPAddress.IsEmpty())
  27. sIPAddress = _T("Not available");
  28. }
  29. return 0;
  30. }

(3) 在文件IPAddressDlg.cpp中载入Winsock库并释放控件,具体代码如下:

  1. int CIPAddressDlg::StartUp()
  2. {
  3. WORD  wVersionRequested;
  4. WSADATA wsaData;
  5. int err;
  6. wVersionRequested = MAKEWORD(2, 0);
  7. err = WSAStartup(wVersionRequested, &wsaData);
  8. if (err != 0) {
  9. return err;
  10. }
  11. if (LOBYTE(wsaData.wVersion) != 2
  12. || HIBYTE(wsaData.wVersion) != 0) {
  13. WSACleanup();
  14. return WSAVERNOTSUPPORTED;
  15. }
  16. return 0;
  17. }

至此整个实例的主要模块介绍完毕,执行后将获取机器名和IP地址,如图1-14所示。

 
图1-14  执行效果
时间: 2024-11-05 16:23:53

小试牛刀--编程实现获取计算机的IP地址和计算机名的相关文章

Java如何获取本地计算机的IP地址和主机名?

在Java编程中,如何获取本地计算机的IP地址和主机名? 以下示例显示如何使用InetAddress类的getLocalAddress()方法获取系统的本地IP地址和主机名. package com.yiibai; import java.net.InetAddress; public class GetLocalIPAddress { public static void main(String[] args) throws Exception { InetAddress addr = Ine

关于是用dotnet获取本机IP地址+计算机名的方法

印象中在maxscript帮助文档里找到过方法,但是当时没记下来.只能通过dotnet实现了. 如果电脑有无线网卡和本地连接,可能会出现乱码,也问了写dotnet的朋友,提供了一些思路,不过最终还是使用了这个笨办法. fn getIP_PCname = ( cc = (dotnetclass "System.Net.Dns") oo = cc.GetHostAddresses(cc.GetHostName()) for ip = 1 to oo.count do ( getip = f

1.1.4 小试牛刀--编程实现获取MAC地址(1)

1.1.4  小试牛刀--编程实现获取MAC地址(1) 实例功能 使用Visual C++开发一个FTP传输系统 源码路径 光盘\yuanma\1\FTP 本实例的目的是,使用Visual C++ 6.0开发一个获取当前机器MAC地址的程序. 1. 选择开发工具 Visual C++是一个功能强大的可视化软件开发工具.自1993年Microsoft公司推出Visual C++ 1.0以来,不断有其新版本问世,随后微软又推出了.NET系列,添加了很多网络功能,但是它的应用有一定的局限性.Visua

Java编程实现获取本机IP和计算机名的功能

import java.net.InetAddress; import java.net.UnknownHostException; public class Test { public static void main(String[] args) { try { InetAddress inetAddress = InetAddress.getLocalHost(); System.out.println("本机IP:" + inetAddress.getHostAddress()

Linux编程获取本机IP地址

使用函数getifaddrs来枚举网卡IP,其中使用到的结构体如下所示: struct ifaddrs { struct ifaddrs *ifa_next; /* Next item in list */ char *ifa_name; /* Name of interface */ unsigned int ifa_flags; /* Flags from SIOCGIFFLAGS */ struct sockaddr *ifa_addr; /* Address of interface *

js获取本机mac地址,IP地址,计算机名

<!DOCTYPE HTML> <html> <head> <title>js获取本机mac地址,IP地址,计算机名</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta content="MSHTML 6.00.2800.1106" name="

IP地址、计算机名称、MAC地址如何获取

以下的操作都在“命令提示窗口”中操作. 已知IP,如何获得计算机名称 方法(1): 使用ping -i ip地址 例如已知地址为192.168.1.168. 那么使用ping -i 192.168.1.168,如果能ping通该计算机.就可以获得该计算机的名称 方法(2): 使用nbtstat -a 加对方IP查对方的主机名 例如nbtstat -a 192.168.1.168 已知计算机名称,如何获得计算机的IP地址 方法(1): 使用ping 计算机名称 例如计算机名称是AAAA 那么使用p

asp网络编程:ASP如何获取客户端真实IP地址

要想透过代理服务器取得客户端的真实IP地址,就要使用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取.不过要注意的事,并不是每个代理服务器都能用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的IP.还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用 Request.ServerVari

获取访问者的IP地址

function getIp() { $realip = NULL; if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ipArray = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); foreach($ipArray as $rs) { $rs = trim($rs); if($rs != 'unknown') { $realip = $rs; break; } } } else if(isset($