各位高手,我是一个初学菜鸟。我编了一个局域网聊天软件,但是在同一局域网不同交换机通讯却会出错,出错是下面两句代码:
pHost=gethostbyname(strHostName);//获得对方的主机名
addrTo.sin_addr.S_un.S_addr=*((DWORD*)pHost->h_addr_list[0]); //通过对方的主机名获取对方的IP地址
执行后发现,无法获得对方的IP,但却可以取得对方的主机名。请问我该怎么做?
pHost=gethostbyname(strHostName);//获得对方的主机名
addrTo.sin_addr.S_un.S_addr=*((DWORD*)pHost->h_addr_list[0]); //通过对方的主机名获取对方的IP地址
执行后发现,无法获得对方的IP,但却可以取得对方的主机名。请问我该怎么做?
从调试中我看到,无法从主机名获得IP..
子网内的主机 对外是不可见的 因为网关会进行NAT 如果你想 通信 就要进行打洞
// 获得主机名.
//
char hostname[256];
int res = gethostname(hostname, sizeof(hostname));
if (res != 0) {
printf("Error: %un", WSAGetLastError());
return -1;
}
printf("hostname=%sn", hostname);
////////////////
// 根据主机名获取主机信息.
//
hostent* pHostent = gethostbyname(hostname);
if (pHostent==NULL) {
printf("Error: %un", WSAGetLastError());
return -1;
}
//////////////////
// 解析返回的hostent信息.
//
hostent& he = *pHostent;
printf("name=%snaliases=%snaddrtype=%dnlength=%dn",
he.h_name, he.h_aliases, he.h_addrtype, he.h_length);sockaddr_in sa;
for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) {
memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length);
// 输出机器的IP地址.
printf("Address: %sn", inet_ntoa(sa.sin_addr)); // 显示地址串
}
11楼 sockaddr_in sa;
for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) {
memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length);
// 输出机器的IP地址.
printf("Address: %sn", inet_ntoa(sa.sin_addr)); // 显示地址串
}
就是这一步好像取不到对方的IP地址.
127.0.0.1 hostname