请大家刚我翻译一段代码,我实在看不太懂,谢谢啦

来源:百度知道 编辑:UC知道 时间:2024/06/03 13:05:02
我要做一个局域网查找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 ==

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;

你是网上下的程序,自己看不懂?
第一个方法是得到域名,第二个是得到域内IP