
请大家刚我翻译一段代码,我实在看不太懂,谢谢啦 100
我要做一个局域网查找IP和主机网络名的程序,现在这是其中一个很重要的模块,可是我看不懂,希望高手帮我翻译一下,谢谢啦。我可以追加给分。constCStringCGTNet...
我要做一个局域网查找IP和主机网络名的程序,现在这是其中一个很重要的模块,可是我看不懂,希望高手帮我翻译一下,谢谢啦。我可以追加给分。
const CString CGTNetwork::GetRemoteName(const LPNETRESOURCE lpNetRS)
{
CString str;
if ((lpNetRS != NULL) && IsServer(lpNetRS) && (lpNetRS->lpRemoteName != NULL))
{
str = lpNetRS->lpRemoteName;
if (0 == str.Left(2).Compare("\\\\"))
str.Delete(0, 2);
}
return str;
}
const CString CGTNetwork::GetRemoteIP(const LPNETRESOURCE lpNetRS)
{
CString strName, strIP;
LPHOSTENT host = NULL;
in_addr * ptr = NULL;
strName = lpNetRS->lpRemoteName;
if (0 == strName.Left(2).Compare("\\\\"))
strName.Delete(0, 2);
host = gethostbyname(strName);
if (host == NULL)
{
TRACE0("\n\r gethostbyname func fail");
return strIP;
}
ptr = (in_addr *)host->h_addr_list[0];
if (ptr == NULL)
return strIP;
int a = ptr->S_un.S_un_b.s_b1;
int b = ptr->S_un.S_un_b.s_b2;
int c = ptr->S_un.S_un_b.s_b3;
int d = ptr->S_un.S_un_b.s_b4;
strIP.Format("%d.%d.%d.%d", a, b, c, d);
return strIP;
} 展开
const CString CGTNetwork::GetRemoteName(const LPNETRESOURCE lpNetRS)
{
CString str;
if ((lpNetRS != NULL) && IsServer(lpNetRS) && (lpNetRS->lpRemoteName != NULL))
{
str = lpNetRS->lpRemoteName;
if (0 == str.Left(2).Compare("\\\\"))
str.Delete(0, 2);
}
return str;
}
const CString CGTNetwork::GetRemoteIP(const LPNETRESOURCE lpNetRS)
{
CString strName, strIP;
LPHOSTENT host = NULL;
in_addr * ptr = NULL;
strName = lpNetRS->lpRemoteName;
if (0 == strName.Left(2).Compare("\\\\"))
strName.Delete(0, 2);
host = gethostbyname(strName);
if (host == NULL)
{
TRACE0("\n\r gethostbyname func fail");
return strIP;
}
ptr = (in_addr *)host->h_addr_list[0];
if (ptr == NULL)
return strIP;
int a = ptr->S_un.S_un_b.s_b1;
int b = ptr->S_un.S_un_b.s_b2;
int c = ptr->S_un.S_un_b.s_b3;
int d = ptr->S_un.S_un_b.s_b4;
strIP.Format("%d.%d.%d.%d", a, b, c, d);
return strIP;
} 展开
展开全部
GetRemoteName 得到域名. 域名取自 LPNETRESOURCE 数据(结构) 成员 lpRemoteName:
str = lpNetRS->lpRemoteName;
第二个,GetRemoteIP,是得到IP。
它的前面部分与GetRemoteName一样,先得到域名:
strName = lpNetRS->lpRemoteName;
再用 gethostbyname()函数,从域名取得 IP 信息:
host = gethostbyname(strName);
host 也是 数据(结构)。
它的成员 host->h_addr_list[0] 是字符串,里面含 4段 IP 数据。
转换到 in_addr 数据(结构):
ptr = (in_addr *)host->h_addr_list[0];
in_addr 结构:
typedef struct in_addr {
union {
struct{
unsigned char s_b1,
s_b2,
s_b3,
s_b4;
} S_un_b;
struct {
unsigned short s_w1,
s_w2;
} S_un_w;
unsigned long S_addr;
} S_un;
} IN_ADDR;
取出4段IP数值,对照上面结构,就懂下面表达式的意思了。
(又是指针,又是union,又是成员!)
int a = ptr->S_un.S_un_b.s_b1;
int b = ptr->S_un.S_un_b.s_b2;
int c = ptr->S_un.S_un_b.s_b3;
int d = ptr->S_un.S_un_b.s_b4;
str = lpNetRS->lpRemoteName;
第二个,GetRemoteIP,是得到IP。
它的前面部分与GetRemoteName一样,先得到域名:
strName = lpNetRS->lpRemoteName;
再用 gethostbyname()函数,从域名取得 IP 信息:
host = gethostbyname(strName);
host 也是 数据(结构)。
它的成员 host->h_addr_list[0] 是字符串,里面含 4段 IP 数据。
转换到 in_addr 数据(结构):
ptr = (in_addr *)host->h_addr_list[0];
in_addr 结构:
typedef struct in_addr {
union {
struct{
unsigned char s_b1,
s_b2,
s_b3,
s_b4;
} S_un_b;
struct {
unsigned short s_w1,
s_w2;
} S_un_w;
unsigned long S_addr;
} S_un;
} IN_ADDR;
取出4段IP数值,对照上面结构,就懂下面表达式的意思了。
(又是指针,又是union,又是成员!)
int a = ptr->S_un.S_un_b.s_b1;
int b = ptr->S_un.S_un_b.s_b2;
int c = ptr->S_un.S_un_b.s_b3;
int d = ptr->S_un.S_un_b.s_b4;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询