1.2.3 小试牛刀--编程(www.cppentry.com)实现获取计算机的IP地址和计算机名(2)
(2) 在文件IPAddressDlg.cpp中编写函数GetLocalHostName()获取机器名,调用函数GetIPAddress()获取机器的IP地址。具体代码如下:
- int CIPAddressDlg::GetLocalHostName(CString &sHostName)
- {
- char szHostName[256];
- int nRetCode;
- nRetCode = gethostname(szHostName, sizeof(szHostName));
- if (nRetCode != 0) {
- sHostName = _T("Not available");;
- return WSAGetLastError();
- }
- sHostName = szHostName;
- return 0;
- }
-
- int CIPAddressDlg::GetIPAddress(const CString &sHostName,
- CString &sIPAddress)
- {
- struct hostent FAR *lpHostEnt = gethostbyname(sHostName);
- if (lpHostEnt == NULL) {
- sIPAddress = _T("");
- return WSAGetLastError();
- }
- LPSTR lpAddr = lpHostEnt->h_addr_list[0];
- if (lpAddr) {
- struct in_addr inAddr;
- memmove(&inAddr, lpAddr, 4);
- sIPAddress = inet_ntoa(inAddr);
- if (sIPAddress.IsEmpty())
- sIPAddress = _T("Not available");
- }
-
- return 0;
- }
(3) 在文件IPAddressDlg.cpp中载入Winsock库并释放控件,具体代码如下: - int CIPAddressDlg::StartUp()
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- wVersionRequested = MAKEWORD(2, 0);
- err = WSAStartup(wVersionRequested, &wsaData);
- if (err != 0) {
- return err;
- }
- if (LOBYTE(wsaData.wVersion) != 2
- || HIBYTE(wsaData.wVersion) != 0) {
- WSACleanup();
- return WSAVERNOTSUPPORTED;
- }
- return 0;
- }
至此整个实例的主要模块介绍完毕,执行后将获取机器名和IP地址,如图1-14所示。
|
| 图1-14 执行效果 |