WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,2),&wsaData))
{
AfxMessageBox(_T("failed to load winsock!"),MB_OK|MB_ICONSTOP);
return -1;
}
char hostname[50];
int err = gethostname(hostname,sizeof(hostname)); //返回值为0表示成功获取主机名
if(err!=0)
{
AfxMessageBox(_T("gethostname error!"));
int lasterror=::GetLastError();
TRACE("gethostname error :%d=\n",lasterror);
}
//get IPv4 name
hostent *pHost=::gethostbyname(hostname);
in_addr addr;
char *p=pHost->h_addr_list[0];
memcpy(&addr.S_un.S_addr,p,pHost->h_length);
char *v4ip=::inet_ntoa(addr);
CString v4(v4ip);
m_strIP=v4;
调用gethostname()之前必须先使用WSAStartup命令来启动WSA(Windows Sockets Asynchronous,Windows异步套接字)。