怎么取得本机的IP地址,并把IP地址负给SOCKADDR_IN的变量。 怎么取得本机的IP地址,并把IP地址负给SOCKADDR_IN的变量。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 char hostname[256]; struct hostent *phost; gethostname(hostname, 256); phost=gethostbyname(hostname); struct sockaddr_in addr; addr.sin_addr=*(in_addr*)phost->h_addr_list[0]; addr.sin_family=AF_INET; addr.sin_port=htons(4001); 获得本地IP地址列表代码int GetIpAddress(const CString &sHostName, CStringArray &sIpAddress){ struct hostent FAR * lpHostEnt=gethostbyname(sHostName); sIpAddress.RemoveAll(); if(lpHostEnt==NULL) { //产生错误 return GetLastError(); } //获取IP int i=0; LPSTR lpAddr=lpHostEnt->h_addr_list[i]; CString temp; while(lpAddr) { i++; struct in_addr inAddr; memmove(&inAddr,lpAddr,4); //转换为标准格式 temp=inet_ntoa(inAddr); if(temp.IsEmpty()) { break; } sIpAddress.Add(temp); lpAddr=lpHostEnt->h_addr_list[i]; } return 0;}调用:if(AfxSocketInit(NULL)==FALSE)//初始化socket { AfxMessageBox("Socket Error"); } CStringArray ip; CString m_sHostName; char hosttemp[256]; gethostname(hosttemp,256); m_sHostName=hosttemp;//如果这里,m_sHostName="www.163.com",将得到网易的IP GetIpAddress(dlg.m_sHostName,ip);//获得本地IP CString temp; int i=0; while(i<ip.GetSize()) { temp+=ip[i]; temp+=";\n"; i++; } MessageBox(dlg.m_sHostName+"的IP是:\n"+temp); } 赋值给 SOCKADDR_IN 变量struct sockaddr_in addr;// lpHostEnt->h_addr_list[0];为前面获得的IP地址列表// 如果有多个IP,则依次类推 lpHostEnt->h_addr_list[1]等等addr.sin_addr=*(in_addr*)lpHostEnt->h_addr_list[0]; 不过不知道是不是楼主在建立服务器的时候初始化socket用的如果不是必须根本不需要获得本机IP再来复制这么复杂直接这样就好了 SOCKADDR_IN ServerAddr; //分配端口及协议族并绑定 ServerAddr.sin_family=AF_INET; ServerAddr.sin_addr.S_un.S_addr =htonl(INADDR_ANY); // 这样就好了 ServerAddr.sin_port=htons(12345); INADDR_ANY允许将套接字绑定到系统中所有可用的接口,以便将来传导任意接口上的客户机连接都可以被监听套接字接受^_^ 对,想获取本机ip倒是不难,不过要绑定本机地址根本没有必要获得本机真实ip,只需绑定INADDR_ANY就行了,它就是本机的意思。绑定这个地址也就对应着0.0.0.0,你用netstat -an命令查看一下本机打开的端口,其中有很多本机地址为0.0.0.0的项都对应着这种绑定方式。如果楼主实在想要获得本机ip,就先gethostname,然后gethostbyname,具体的前面几位已经讲了。 CGridCtrl问题 由_CommandPtr 命令对象引起来的#3121错误??? 如何调用Delphi编写的一个COM组件 ****向高手求教:使用了属性页(CTabCtrl)控件,如何在A页用按钮刷新B页的列表框**** 关于ssl的一个问题 简单问题! 简单的问题,关于CHtmlView的滚动条。急! hook注入到进程后调用dll的问题 求助,ADO,执行Execute语句后,有时无响应,不再往下执行? dao 程序如何打包 在别的机器上运行` 问一个宏? 诸位高手看过来,下面的C语句到底是要做什么?
struct hostent *phost;
gethostname(hostname, 256);
phost=gethostbyname(hostname); struct sockaddr_in addr;
addr.sin_addr=*(in_addr*)phost->h_addr_list[0];
addr.sin_family=AF_INET;
addr.sin_port=htons(4001);
{
struct hostent FAR * lpHostEnt=gethostbyname(sHostName);
sIpAddress.RemoveAll();
if(lpHostEnt==NULL)
{
//产生错误
return GetLastError();
}
//获取IP
int i=0;
LPSTR lpAddr=lpHostEnt->h_addr_list[i];
CString temp;
while(lpAddr)
{
i++;
struct in_addr inAddr;
memmove(&inAddr,lpAddr,4);
//转换为标准格式
temp=inet_ntoa(inAddr);
if(temp.IsEmpty())
{
break;
}
sIpAddress.Add(temp);
lpAddr=lpHostEnt->h_addr_list[i];
}
return 0;
}
调用:if(AfxSocketInit(NULL)==FALSE)//初始化socket
{
AfxMessageBox("Socket Error");
}
CStringArray ip;
CString m_sHostName;
char hosttemp[256];
gethostname(hosttemp,256);
m_sHostName=hosttemp;//如果这里,m_sHostName="www.163.com",将得到网易的IP
GetIpAddress(dlg.m_sHostName,ip);//获得本地IP
CString temp;
int i=0;
while(i<ip.GetSize())
{
temp+=ip[i];
temp+=";\n";
i++;
}
MessageBox(dlg.m_sHostName+"的IP是:\n"+temp);
}
// 如果有多个IP,则依次类推 lpHostEnt->h_addr_list[1]等等addr.sin_addr=*(in_addr*)lpHostEnt->h_addr_list[0];
ServerAddr.sin_addr.S_un.S_addr =htonl(INADDR_ANY); // 这样就好了
ServerAddr.sin_port=htons(12345);
如果楼主实在想要获得本机ip,就先gethostname,然后gethostbyname,具体的前面几位已经讲了。