void CDemoDlg::OnTest()
{}
---------------------------------------
首先输入:
#include "winsock.h"
WORD wVersionRequested;
WSADATA wsaData;
char name[255];
CString ip;
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 2, 0 );
if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
{
if( gethostname ( name, sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
}
}
WSACleanup( );
}
AfxMessageBox(ip);
===========================================================
知识点:
1.IP获取,通过文件winsock.h,在模块中包含ws2_32.lib
2.检查socket版本的函数,WSASTARTUP();
3.获取主机名的函数,gethostname();
4.gethostbyname(hostname)函数,返回hostent结构体类型信息,解析此结构体,可获得相关hostname的信息.本人认为用处不太大
.
5.根据hostname,通过inet_ntoa()函数转换成ip地址,其参数要用到sockaddr_in.以及memcpy函数.
6.终止 Windows sockets API的函数WSAClearnup()函数
WSAGetLastError()函数用来获取winsock错误.
gethostname返回整形0,表示成功.否则失败.
==============================================================
给你一个完整的类(CSockInfo,加入你的工程,然后调用就可以了。
以后程序中需要的时候,把这两个文件加进去
在需要取IP的程序里
#include "sockinfo.h"
CSockInfo::GetLocalHostIP();
/////////////////////////////////////////////
// SockInfo.h: interface for the CSockInfo class.
// Big Lee 2002
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SOCKINFO_H__FA14210C_2BED_11D6_81EB_0080C8ED46AF__INCLUDED_)
#define AFX_SOCKINFO_H__FA14210C_2BED_11D6_81EB_0080C8ED46AF__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CSockInfo
{
public:
static CString GetLocalHostIP();
static CString GetLocalHostName();
CSockInfo();
virtual ~CSockInfo();
};
#endif // !defined(AFX_SOCKINFO_H__FA14210C_2BED_11D6_81EB_0080C8ED46AF__INCLUDED_)
///////////////////////////////////////////////////////////
// SockInfo.cpp: implementation of the CSockInfo class.
// Big Lee 2002
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SockInfo.h"
#include <afxsock.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSockInfo::CSockInfo()
{
}
CSockInfo::~CSockInfo()
{
}
CString CSockInfo::GetLocalHostName()
{
WORD wVersionRequested;
WSADATA wsaData;
char name[255];
memset(name,'\0',255);
wVersionRequested = MAKEWORD( 2, 0 );
if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
{
if( gethostname (name, sizeof(name)) == 0)
{
return name;
}
WSACleanup( );
}
return "";
}
CString CSockInfo::GetLocalHostIP()
{
CString strIP("");
WORD wVersionRequested;
WSADATA wsaData;
char name[255];
memset(name,'\0',255);
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 2, 0 );
if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
{
if( gethostname ( name, sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
strIP= inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
}
}
WSACleanup( );
}
return strIP;
}
////////////////////////////