求助 为何我获取的IP都是一样的?

90Runner 2013-07-16 01:29:04
如下是我的代码,求哪位大神给我解答下呗,为什么我获取的IP都是重复的 还显示了两遍?
CString strName;
CString strIP;

m_lst.DeleteAllItems();

HANDLE hEnum;
WSADATA wsaData;
DWORD Count = 0xFFFFFFFF;
DWORD MyBuffer = 4096;
DWORD dMyRes;
NETRESOURCE *nMyRes0 = NULL;
NETRESOURCE *nMyRes1 = NULL;
NETRESOURCE *nMyRes2 = NULL;
LPVOID lMyBuffer = new char[4096];
LPVOID lMyBuffer1 = new char[40960];
LPVOID lMyBuffer2 = new char[4096];

int nIndex = 0;
int nret=WSAStartup(MAKEWORD(2,2),&wsaData);
if(nret)
{
MessageBox("加载失败了!");
}
dMyRes=WNetOpenEnum(RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,
NULL,&hEnum);
dMyRes=WNetEnumResource(hEnum,&Count,lMyBuffer,&MyBuffer);
nMyRes0=(NETRESOURCE*)lMyBuffer;
//.......
// CList<CString,CString>myList;
//.......
for(DWORD n=0;n<Count;n++,nMyRes0++)
{
DWORD Count1 = 0xFFFFFFFF;
dMyRes=WNetOpenEnum(RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,
nMyRes0,&hEnum);
dMyRes=WNetEnumResource(hEnum,&Count1,lMyBuffer1,&MyBuffer);
nMyRes1=(NETRESOURCE*)lMyBuffer1;


for(DWORD i=0;i<Count1;i++,nMyRes1++)
{
DWORD dMyCount=0xFFFFFFFF;
dMyRes=WNetOpenEnum(RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,
nMyRes1,&hEnum);
dMyRes=WNetEnumResource(hEnum,&dMyCount,lMyBuffer2,&MyBuffer);
nMyRes2=(NETRESOURCE*)lMyBuffer2;

for(int j=0;j<dMyCount;j++,nMyRes2++)
{

CString myName = nMyRes2->lpRemoteName;
myName=myName.Right(myName.GetLength()-2);
nIndex=m_lst.InsertItem(0,myName);
struct hostent* pMyhost;
pMyhost = gethostbyname(myName);



if(pMyhost==NULL)
{
m_lst.SetItemText(nIndex,1,"无法获得IP地址");
}
else
{
for(int k=0;k<4;k++)
{
CString MyAddress;
if(k>0)
{
strIP+=".";
}
MyAddress.Format("%u",(unsigned int)
((unsigned char*)pMyhost->h_addr_list[0])[k]);
strIP+=MyAddress;
}
m_lst.SetItemText(nIndex,1,strIP);


CString buf;
buf.Format("%d",dMyCount);
SetDlgItemText(IDC_EDIT1,buf);
}
}
}
}
delete lMyBuffer;
delete lMyBuffer1;
delete lMyBuffer2;
WNetCloseEnum(hEnum);
WSACleanup();
}
CDialog::OnTimer(nIDEvent);
}
...全文
152 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shen_wei 2013-07-17
  • 打赏
  • 举报
回复
for(int j=0;j<dMyCount;j++,nMyRes2++) { CString myName = nMyRes2->lpRemoteName; 在循环中myName的值一致不变。。 }
「已注销」 2013-07-17
  • 打赏
  • 举报
回复
1 、WNetEnumResource参数中的 lpcCount Pointer to a variable specifying the number of entries requested. If the number requested is –1, the function returns as many entries as possible. 有可能返回-1的,不要直接拿来做循环,或者在循环之前应该先做判断。 2、WNetOpenEnum和WNetEnumResource反复在循环中执行,你自己觉得是否有必要? 这个就是造成多个IP重复的原因。 3、h_addr_list[0])[k]);这里的0还是要改成j才可能循环,不然你就是永远只读一个相同的数据。 至于崩溃,你先调整程序结构再断点自己跟一下。
90Runner 2013-07-17
  • 打赏
  • 举报
回复
引用 5 楼 ptjian 的回复:
把0改成j啊。还想怎么的 [quote=引用 4 楼 Paddy90 的回复:] [quote=引用 3 楼 shen_wei 的回复:] MyAddress.Format("%u",(unsigned int) ((unsigned char*)pMyhost->h_addr_list[0])[k]);
大神 您能说的详细点吗 您标记为红的地方要如何修改? 菜鸟一枚还望多多指点[/quote][/quote] 您说的方法 我之前就试过了 把零改成j程序直接就崩溃了 求指点
90Runner 2013-07-17
  • 打赏
  • 举报
回复


感谢给位给予的帮助 我又重新写了一遍代码 问题解决了
「已注销」 2013-07-16
  • 打赏
  • 举报
回复
把0改成j啊。还想怎么的
引用 4 楼 Paddy90 的回复:
[quote=引用 3 楼 shen_wei 的回复:] MyAddress.Format("%u",(unsigned int) ((unsigned char*)pMyhost->h_addr_list[0])[k]);
大神 您能说的详细点吗 您标记为红的地方要如何修改? 菜鸟一枚还望多多指点[/quote]
90Runner 2013-07-16
  • 打赏
  • 举报
回复
引用 3 楼 shen_wei 的回复:
MyAddress.Format("%u",(unsigned int) ((unsigned char*)pMyhost->h_addr_list[0])[k]);
大神 您能说的详细点吗 您标记为红的地方要如何修改? 菜鸟一枚还望多多指点
shen_wei 2013-07-16
  • 打赏
  • 举报
回复
MyAddress.Format("%u",(unsigned int) ((unsigned char*)pMyhost->h_addr_list[0])[k]);
90Runner 2013-07-16
  • 打赏
  • 举报
回复
重新上传张图片,求解答 求帮助啊
ouyh12345 2013-07-16
  • 打赏
  • 举报
回复
是不是某些函数内部使用了静态变量? 这时,获取值后,应该copy,而不是=

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧