求助 为何我获取的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);
}
...全文
160 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,而不是=
115 DiscRobot的功能比较多,在帖子内可能无法全部提到,若有什么疑问可以在本区发帖求助~ 标准提取式是什么? 标准提取式实际是由文件信息组成的一个表达式(由Popok提出) 使用这个表达式就可以强制转存所有的115文件(只要不在服务器上删除) 标准提取式的格式为:文件哈希值(SHA1)#文件字节大小#文件名(这个可以随意填) 我是下载方,应该如何使用标准提取式? 打开 115 DiscRobot点击「文件转存」,在下方会有一个标准提取式的选择项,打上勾就切换到标准提取式转存状态了 我是发布方,应该如何批量的将资源生成文档以便发布? 单一账号生成操作: 1、打开 115 DiscRobot 2、登陆需要保存需发布资源的账号 3、选择「文件管理」并对着列表右键获取文件信息,若是子文件夹则继续对着文件夹获取 4、列表显示完毕后,点击「功能设置」找到「生成文件信息」勾上「标准提取式」 5、回到「文件管理」,对着列表空白的地方右键选择「列表生成文档」 6、生成完毕后会自动跳出生成好的TXT信息,具体的文件在DiscRobot主文件目录的FileList文件夹内 多账号生成操作: 1、打开 115 DiscRobot 2、选择「文件管理」并勾上「扩展功能」内的「生成文档」 3、同单一生成一样,在「功能设置」内选择好需要生成的格式 4、在账号列表信息中按住Ctrl或Shift选择需要生成文件信息的账号后点击「执行选中账号」(若全部生成则点击「执行全部账号」) 我是资源帝,115账号千千万,天天被禁IP怎么办? 115官方有限定同个时间段或者一天内一个IP登陆账号的上限,若登陆的超过了这个账号数,那么就会被官方禁止IP24小时 DiscRobot拥有防禁止IP的功能,但是并不完善(通过已保存Cookie直接写登陆状态,不通过登陆) 将「账号管理」右上角再上面点的「防禁登陆」勾上即切换到防屏蔽登陆状态 防屏蔽登陆说明: 1、确保账号都已经有Cookie信息,否则会出现使用过防屏蔽登陆无法登陆正常账号的情况,必须重新启动DiscRobot (不管有无防屏蔽登陆状态,登陆账号的时候软件都会自动记录下该账号的Cookie信息并同意存在主目录的Cookies.ini文件内) 如何将指定提取码转换为标准提取式? 软件目前只支持正常文件的转存 1、首先点击「地址解析」,将需要转换的文件提取码加入列表 2、右下角选择生成模式为「生成标准提取式」 3、点击「列表生成文档」开始执行

18,363

社区成员

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

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