CString GetIP()
{ WORD wversion;
WSADATA wsadata;
int err;
wversion=MAKEWORD(1,1);
err=WSAStartup(wversion,&wsadata);
if(err=0)
{
char hostname[256];
int res=gethostname(hostname,sizeof(hostname));
struct hostent *pHostEnt;
pHostEnt=gethostbyname(hostname);
sockaddr_in addr;
memcpy(&addr.sin_addr.s_addr,pHostEnt->h_addr_list[0],pHostEnt->h_length);
return inet_ntoa((addr.sin_addr));
}
WSACleanup();
}
调用上面的函数,运行时发生错误!请问应该怎么写?谢谢!!!
{ WORD wversion;
WSADATA wsadata;
int err;
wversion=MAKEWORD(1,1);
err=WSAStartup(wversion,&wsadata);
if(err=0)
{
char hostname[256];
int res=gethostname(hostname,sizeof(hostname));
struct hostent *pHostEnt;
pHostEnt=gethostbyname(hostname);
sockaddr_in addr;
memcpy(&addr.sin_addr.s_addr,pHostEnt->h_addr_list[0],pHostEnt->h_length);
return inet_ntoa((addr.sin_addr));
}
WSACleanup();
}
调用上面的函数,运行时发生错误!请问应该怎么写?谢谢!!!
char szHostName[128];//将计算机名称放入数组中
struct hostent *pHost;//定义一个结构体指针变量pHost
//通过gethostname函数来获取计算机的名称
if(!gethostname(szHostName,sizeof(szHostName)))//获取成功
{
SetDlgItemText(IDC_NAME,szHostName);
//通过函数gethostbyname和计算机的名称来获取计算机的IP地址
pHost = gethostbyname(szHostName);
//将所获取的IP地址转化为真正的IP地址
LPCSTR IPAddress = inet_ntoa(*(struct in_addr*)(*pHost->h_addr_list));
SetDlgItemText(IDC_IP,IPAddress);
}
else
{
AfxMessageBox("<信息未知>");
}
err=WSAStartup(wversion,&wsadata);
调用好像都是对的,你的错误代码是什么,用WSAGetLastError()看下,可能是1.1版本的太低了吧,你把MAKEWORD(1,1);改成MAKEWORD(2,2);看下.
char szHostName[256];
gethostname(szHostName,256);
//get ipv4 address.
hostent *pHost=::gethostbyname(szHostName);
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);
WSADATA wsaData;
wVersionRequested=MAKEWORD(1,1);
WSAStartup(wVersionRequested,&wsaData);
hostent *p;
char s[128];
char *p2;
gethostname(s,128);
p=gethostbyname(s);
p2=inet_ntoa(*((in_addr*)p->h_addr));//或者为p2=inet_ntoa(*((in_addr*)p->h_addr_list[0]));
m_LocalIp=CString(p2);
UpdateData(false);
你试验一下,我已经调试通过了
#include "nb30.h"
#include "Winsock2.h"
#include <stdio.h>
CInitSock initSock; // 初始化Winsock库void main()
{
char szHost[256];
// 取得本地主机名称
::gethostname(szHost, 256);
// 通过主机名得到地址信息
hostent *pHost = ::gethostbyname(szHost);
// 打印出所有IP地址
in_addr addr;
for(int i = 0; ; i++)
{
char *p = pHost->h_addr_list[i];
if(p == NULL)
break; memcpy(&addr.S_un.S_addr, p, pHost->h_length);
char *szIp = ::inet_ntoa(addr);
printf(" 本机IP地址:%s \n ", szIp);
}
}