求助!!各位帮帮忙!

Wanghuail_99 2012-08-21 09:24:01
最近做一个局域网内传送文件的工具,其中获取局域网内运行了程序的用户一直没做出来,甚至获取本机用户名都要出错,实在是深受打击又毫无办法。在此向各位求助,哪位大侠帮我写下获取用户的代码吧。在MFC对话框上拖个ListControl控件,能将获取到的用户名、IP地址和本机的用户名、IP地址显示在上面就行了。百分求助,大家帮帮忙,我实在是没办法了。
...全文
135 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdg3707 2012-08-21
  • 打赏
  • 举报
回复
"总是出现Debud Assertion Failed的错误"
这应该是你的程序的问题,不是通信问题,应该是哪个变量无效造成的,或者什么句柄无效.你设断点就知道了,或者出现这个提示时你选中断,看是哪条语句有问题,这样就知道是哪个变量无效.
编程序除了算法外,调试能力也非常重要,开始学编程时出现的问题越多越好,这对于提高自己的能力有非常大的帮助,一帆风顺反而不是好事
fujialin2011 2012-08-21
  • 打赏
  • 举报
回复
你找一下出错的原因,应该是处理问题,逻辑是通了的,可能是你不断的获取加在列表上造成的,加载过的用户可以不管,不要老是不停的加,你具体看看自己的处理方式吧,发送消息最好还是加想要的标志,比如发送广播请求加REQUEST,回复用ACK,等等来处理,离成功不远了,加油!
Wanghuail_99 2012-08-21
  • 打赏
  • 举报
回复
谢谢楼上的朋友,我也是这样做的,但是总出错,我没辙了。列表上显示不出来用户信息。而且总是出现Debud Assertion Failed的错误。
fujialin2011 2012-08-21
  • 打赏
  • 举报
回复
你可以在你的程序里面做2个线程,一个用于监听消息,用于接受广播消息和对方返回的消息,接受到广播消息后返回自己的信息,收到对方返回的消息后将对方信息加载到你的列表,一个线程用于发送广播消息,他们之间合作就可以实现得到局域网的用户了,要是跨网段的话要另外考虑哦
Gloveing 2012-08-21
  • 打赏
  • 举报
回复
获取到用户名、IP地址?SendArp不行吧?
SendArp只能获取MAC地址啊
使用gethostbyaddr
Wanghuail_99 2012-08-21
  • 打赏
  • 举报
回复
广播和这个SendARP()哪种更便捷呢?
各位大哥哪位时间比较充裕,帮我写写这完整的代码实现获取用户并显示列表的功能吧。不甚感激!!
Eleven 2012-08-21
  • 打赏
  • 举报
回复
SendARP()
Wanghuail_99 2012-08-21
  • 打赏
  • 举报
回复
我下得有源码。太多了看不懂。我才接触这块。哎,头疼得很。
fujialin2011 2012-08-21
  • 打赏
  • 举报
回复
飞鸽传书有源码的,你看看吧!其实用广播通讯可以找到局域网的用户
傻X 2012-08-21
  • 打赏
  • 举报
回复
到家帮你看看,私信我QQ,我们这里上班私信打不开的。
Wanghuail_99 2012-08-21
  • 打赏
  • 举报
回复
先顶。。最好是VS2010做的。先谢谢大家了
Wanghuail_99 2012-08-21
  • 打赏
  • 举报
回复
感谢各位,问题解决了。是ListControl控件属性设置出问题了。
dickbarry 2012-08-21
  • 打赏
  • 举报
回复
m_UserListCtrl.InsertItem(m_UserListCtrl.GetItemCount(), _T(" "));
Gloveing 2012-08-21
  • 打赏
  • 举报
回复
hostIp = (CString)inet_ntoa(*(in_addr* )*pHost ->h_addr_list);
-》
hostIp = (CString)inet_ntoa(*(in_addr* )*pHost ->h_addr_list[0]);
Wanghuail_99 2012-08-21
  • 打赏
  • 举报
回复
char name[128];
struct hostent* pHost = NULL;
CString hostName(""); //本机用户名
CString hostIp(""); //本机IP
ZeroMemory(name, 128);
//获取本机IP和用户名并加入列表
gethostname(name, sizeof(name));
if(gethostname(name, sizeof(name)) != 0)
{
MessageBox((CString)"获取本机用户名失败!",(CString)"提示", MB_OK);
return -1;

}
//MessageBox(NULL,(CString)"123",(CString)"提示",MB_OK);
pHost = gethostbyname(name);
hostName = pHost ->h_name;
hostIp = (CString)inet_ntoa(*(in_addr* )*pHost ->h_addr_list);

m_UserListCtrl.InsertItem(m_UserListCtrl.GetItemCount(), (CString)"");
m_UserListCtrl.SetItemText(m_UserListCtrl.GetItemCount() - 1, 0, hostName);
m_UserListCtrl.SetItemText(m_UserListCtrl.GetItemCount() - 1, 1, hostIp);
ZeroMemory(name, 128);


各位帮我看看问题出在哪了?这是获取本机信息加入列表的代码。把这句m_UserListCtrl.InsertItem(m_UserListCtrl.GetItemCount(), (CString)"");注释掉不会出错,但是List上就不会有本机信息显示了。
Wanghuail_99 2012-08-21
  • 打赏
  • 举报
回复
感谢楼上各位支持。这玩意把我整惨了,搞了一个多月了都没做出来。郁闷得很。网上找资料也不容易找到适合自己的。

18,356

社区成员

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

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