当前位置: 技术问答>linux和unix
C++问题,在windows下可以用inet_ntoa(cliaddr.sin_addr);得到IP地址,在linux下怎么办?
来源: 互联网 发布时间:2014-12-08
本文导语: C++问题,在windows下可以用inet_ntoa(cliaddr.sin_addr);得到IP地址,在linux下怎么办?我看到书上也是用inet_ntoa()得到ip地址的,为什么?为什么?? 还有我看书上说可以用 read write close 对一个 socket 读写,关闭,为什么我不可以?我只...
C++问题,在windows下可以用inet_ntoa(cliaddr.sin_addr);得到IP地址,在linux下怎么办?我看到书上也是用inet_ntoa()得到ip地址的,为什么?为什么??
还有我看书上说可以用 read write close 对一个 socket 读写,关闭,为什么我不可以?我只能用recv send shutdown
我是用的 redhat7.3 + kde 在,kdevelop2.1下写程序.
谢了
还有我看书上说可以用 read write close 对一个 socket 读写,关闭,为什么我不可以?我只能用recv send shutdown
我是用的 redhat7.3 + kde 在,kdevelop2.1下写程序.
谢了
|
试试:
1、inet_ntoa()加入头文件:
#include
#include
#include
2、read()、write()、close()加入头文件:
#include
1、inet_ntoa()加入头文件:
#include
#include
#include
2、read()、write()、close()加入头文件:
#include
|
我写过这样的一个函数,不知道对兄弟有没有帮助:
string C_TcpSvr::GetLocalIP(void)
{
//-------------------------------------------------------
//得到地址
struct hostent* h;
char host[100];
int i;
i = gethostname(host, 100); //0succ-1fail
if (i == -1)
{
return("");
}
//h得到的地址为网络顺序
if ((h = gethostbyname(host)) == NULL)
{
printf("Error : %s!n", strerror(h_errno));
return("");
}
const char* const chLsIP = inet_ntoa(*((struct in_addr *)h->h_addr));
string strLsIP(chLsIP);
return(strLsIP);
//--------------------------------------------------------
}
有时候一台机器是有多个ip地址的,详细的情况可以自己查阅资料。
string C_TcpSvr::GetLocalIP(void)
{
//-------------------------------------------------------
//得到地址
struct hostent* h;
char host[100];
int i;
i = gethostname(host, 100); //0succ-1fail
if (i == -1)
{
return("");
}
//h得到的地址为网络顺序
if ((h = gethostbyname(host)) == NULL)
{
printf("Error : %s!n", strerror(h_errno));
return("");
}
const char* const chLsIP = inet_ntoa(*((struct in_addr *)h->h_addr));
string strLsIP(chLsIP);
return(strLsIP);
//--------------------------------------------------------
}
有时候一台机器是有多个ip地址的,详细的情况可以自己查阅资料。