int GetAddress(
BYTE& nField0,
BYTE& nField1,
BYTE& nField2,
BYTE& nField3
);
int GetAddress(
DWORD& dwAddress
);
CString strIP;
BYTE IP0,IP1,IP2,IP3;
DWORD dwIP;
m_Ip.GetAddress(&IP0,&IP1,&IP2,&IP3);
strIP.Format(_T("%d.%d.%d.%d"),IP0,IP1,IP2,IP3);
或者
m_Ip.GetAddress(&dwIP);
strIP.Format(_T("%d.%d.%d.%d"),(BYTE)dwIP>>24,(BYTE)dwIP>>16,(BYTE)dwIP>>8,(BYTE)dwIP);
如果你想去IP可以直接用:
m_Ip.GetWindowText(strIP);
char sHostName[100];
gethostname(sHostName,sizeof(sHostName));
struct hostent FAR * lpHostEnt=gethostbyname(sHostName);
if(lpHostEnt==NULL)
{
MessageBox(_T("error"));
}
//获取IP
LPSTR lpAddr=lpHostEnt->h_addr_list[0];
if(lpAddr)
{
struct in_addr inAddr;
memmove(&inAddr,lpAddr,4);
CString str;
str=inet_ntoa(inAddr);
m_edit=str;
UpdateData(0);
DWORD dw1=inet_addr(inet_ntoa(inAddr));
WORD wd1=LOWORD(dw1);//取高十六位
WORD wd2=HIWORD(dw1);//取低十六位
BYTE bte1=LOBYTE(wd1);
BYTE bte2=HIBYTE(wd1);
BYTE bte3=LOBYTE(wd2);
BYTE bte4=HIBYTE(wd2);
m_ip.SetAddress(bte1,bte2,bte3,bte4);
//m_ip.SetAddress(inet_addr(inet_ntoa(inAddr)));
}
取出的IP地址,先转化为CString,紧接着转化为DWORD。如果这时候直接将DWORD在IP CONTROL中显示出来的话,将是一个不正确顺序的IP,低位和高位的顺序完全相反。只有将里面的数据取出,放在BYTE里,然后按照从低到高的顺序在IP CONTROL中显示出来,才能正确的显示本地IP。
该程序在VS2008.NET SP1环境下调试通过。
//将CString 型IP地址在IPAddressCtrl中显示
CString strIP="192.168.0.10";
DWORD dwIP;
dwIP = inet_addr(strIP);
unsigned char *pIP = (unsigned char*)&dwIP;
m_ipAddr.SetAddress(*pIP, *(pIP+1), *(pIP+2), *(pIP+3));
//将IPAddressCtrl中的IP地址获得并转换成CString型
unsigned char *pIP;
CString strIP;
DWORD dwIP;
m_ipAddr.GetAddress(dwIP);
pIP = (unsigned char*)&dwIP;
strIP.Format("%u.%u.%u.%u",*(pIP+3), *(pIP+2), *(pIP+1), *pIP);
CIPAddressCtrl的用法
CIPAddressCtrl的用法
CIPAddressCtrl的值转换成CString,CString转换成CIPAddressCtrl
CString strIP="192.168.1.184";
m_IPAddr.SetWindowText(strIP);
CString strIP;
m_IPAddr.GetWindowText(strIP);
CString strIP="192.168.1.184";
DWORD dwAddress= ntohl( inet_addr(strIP));
m_IPAddr.SetAddress(dwAddress);
为控件设置数据
m_addr.SetAddress(192,168,0,2);
从控件得到数据
BYTE b1,b2,b3,b4;
m_addr.GetAddress(b1,b2,b3,b4);