name为机器名,定义的为CString类型;
LPCSTR p;
p=(LPCSTR)name;
struct hostent FAR *gethostbyname(p);
struct hostent *pHost;
pHost=gethostbyname(p);
pHost取不到着得,而P我中有正确的机器名
char buf[1024];
sprintf(buf, "name=%s\naliases=%s\naddrtype=%d\nlength=%d\n",
pHost->h_name, pHost->h_aliases, pHost->h_addrtype, pHost->h_length);
sockaddr_in sa;
for (int nAdapter=0; pHost->h_addr_list[nAdapter]; nAdapter++)
{
memcpy ( &sa.sin_addr.s_addr, pHost->h_addr_list[nAdapter],pHost->h_length);
// 输出机器的IP地址.
AfxMessageBox(inet_ntoa(sa.sin_addr)); // 显示地址串
}
LPCSTR p;
p=(LPCSTR)name;
struct hostent FAR *gethostbyname(p);
struct hostent *pHost;
pHost=gethostbyname(p);
pHost取不到着得,而P我中有正确的机器名
char buf[1024];
sprintf(buf, "name=%s\naliases=%s\naddrtype=%d\nlength=%d\n",
pHost->h_name, pHost->h_aliases, pHost->h_addrtype, pHost->h_length);
sockaddr_in sa;
for (int nAdapter=0; pHost->h_addr_list[nAdapter]; nAdapter++)
{
memcpy ( &sa.sin_addr.s_addr, pHost->h_addr_list[nAdapter],pHost->h_length);
// 输出机器的IP地址.
AfxMessageBox(inet_ntoa(sa.sin_addr)); // 显示地址串
}
name为机器名,定义的为CString类型;
LPCSTR p;
p=(LPCSTR)name;
struct hostent *pHost;
pHost=gethostbyname((char *)p);
pHost取不到着得,而P我中有正确的机器名
char buf[1024];
sprintf(buf, "name=%s\naliases=%s\naddrtype=%d\nlength=%d\n",
pHost->h_name, pHost->h_aliases, pHost->h_addrtype, pHost->h_length);
sockaddr_in sa;
for (int nAdapter=0; pHost->h_addr_list[nAdapter]; nAdapter++)
{
memcpy ( &sa.sin_addr.s_addr, pHost->h_addr_list[nAdapter],pHost->h_length);
// 输出机器的IP地址.
AfxMessageBox(inet_ntoa(sa.sin_addr)); // 显示地址串
}
int ret = WSAStartup(MAKEWORD(2, 2), &sd);
hostent *host;
host = gethostbyname("computername");
char hostname[20];
gethostname(hostname,nLen); // 获得本机主机名struct hostent FAR* lpHostEnt = gethostbyname(strHostName);
所以应该这么处理
CSockAddr CBlockingSocket::GetHostByName(const char* pchName, const USHORT ushPort /* = 0 */)
{
hostent* pHostEnt = gethostbyname(pchName);
if(pHostEnt == NULL) {
CSockAddr sockAddr(pchName,ushPort);
//throw new CBlockingSocketException("GetHostByName");
return sockAddr;
}
ULONG* pulAddr = (ULONG*) pHostEnt->h_addr_list[0];
SOCKADDR_IN sockTemp;
sockTemp.sin_family = AF_INET;
sockTemp.sin_port = htons(ushPort);
sockTemp.sin_addr.s_addr = *pulAddr; // address is already in network byte order
return sockTemp;
}
char szName[256];if(WSAStartup(MAKEWORD(2,0),&wsdata) != 0)
{
if(gethostname(szName,256) != 0)
{
AfxMessageBox(szName);
}
}