remoteHost = gethostbyname(cip);
if (remoteHost != NULL)
{
//方法一:
memcpy(&HostAddr.sin_addr.S_un.S_addr ,&remoteHost->h_addr_list[0],remoteHost->h_length);
ipstr=inet_ntoa(HostAddr.sin_addr);
printf("IP:%s",ipstr);
/* //方法二:
pptr = remoteHost->h_addr_list;
l1 = inet_addr(*pptr);
ipstr = inet_ntoa(addr1);
printf("official hostname:%s\n",remoteHost->h_name);
printf(" alias:%s\n",*pptr);
for(;*pptr!=NULL;pptr++)
printf("IP address: %s\n", inet_ntoa(addr1));
*/
两个办法都无法获得正确IP,请指正。
解决方案 »
- 如果我想得到一个float型的数组,下面该怎么写.求教
- 谁能给个多线程下载的代码?VC6 的,谢谢!
- 快来接分了!!virtual BOOL InitInstance();方法怎么没有被执行!
- 天哪,出鬼了,高手来捉鬼呀.
- 谁用过epson针式打印机,进来帮个忙啊!!!~~~~~~~~~~~~~~~~~
- 从水源听说jennyvenus老大当MVP了,恭喜~
- 如何在创建的对话框左上角添加图标?
- VC中月历控件的使用求解~~
- 长春“金成电脑公司”哪为听过,公司如何??
- 如何从DirectX模式中退出来,但并不退出程序.
- 请教一下iocp发送数据的问题?
- CSDN积分140分怎么就不能下载CSDN的资料???
表示的是主机的ip地址,注意,这个是以网络字节序存储的。千万不要直接用printf带%s参数来打这个东西,会有问题的哇。所以到真正需要打印出这个IP的话,需要调用inet_ntop()。
Hostent = gethostbyname(HostName);
int i=0;
char **ptr=Hostent->h_addr_list;
for(; ptr[i];i++)
{
printf("\n\n第%d个网络接口:\n", i+1 );
printf("IP地址:%s\n", inet_ntoa(*(IN_ADDR*)ptr[i]));
}
inet_ntoa
The inet_ntoa function converts an (Ipv4) Internet network address into a string in Internet standard dotted format.
=================
所以这样没问题
{
struct hostent FAR *lpHostEnt = gethostbyname (sHostName); if (lpHostEnt == NULL) return ""; LPSTR lpAddr = lpHostEnt->h_addr_list[0];
if (lpAddr) {
struct in_addr inAddr;
memmove (&inAddr, lpAddr, 4);
CString strIP = inet_ntoa (inAddr);
if (strIP.IsEmpty())
return "";
else
return strIP;
}
}
CString CTestDlg::GetIPAddress(const CString &sHostName)
{
CString strIP = "";
struct hostent FAR *lpHostEnt = gethostbyname (sHostName);
if (lpHostEnt == NULL) return "";
LPSTR lpAddr = lpHostEnt->h_addr_list[0];
if (lpAddr)
{
struct in_addr inAddr;
memmove (&inAddr, lpAddr, 4);
strIP = inet_ntoa (inAddr);
if (sIPAddress.IsEmpty()) return "";
}
else return "";
return strIP;
}