c# 如何判断网络邻居中的电脑是否在线,

莫名其妙的人参果 2019-10-12 12:07:44
经常遇到网络邻居中显示有,却实际没打开电脑,无法打开共享;或者电脑实际上打开了却没有正确显示的情况,想自己做一个工具。网上找了些代买,实验了下,发现能收到电脑也能打开,,,,问题还是跟网络邻居中一样.... 明明电脑没打开 却能搜到,明明电脑开着却没有名字在列表中....

求个方法 判断 电脑是否在线,或者干脆给我代码也行.... 就是一个列表显示全部在线局域网的电脑 名称,然后 双击会打开... 我现在能显示电脑,也能打开能打开的电脑....就是没法判断那个电脑是否在线,或者有些明明在线的电脑却没有显示上去
private void dakaiwenjianj(string aaa)
{
// var path = string.Format(@"{0}\..\..\", Application.StartupPath);//(组合为新的字符串) //
// var path = @"shell net USE\\软体文员";//组合新的路径

// ShellExecute Me.hWnd, "open", "explorer", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", vbNullString, SW_SHOWNORMAL
System.Diagnostics.Process.Start( "explorer.exe", aaa);
}
private void GetAllLocalMachineName()
{
System.Diagnostics.ProcessStartInfo prcssStrtInfo = new
System.Diagnostics.ProcessStartInfo();
prcssStrtInfo.FileName = @"C:windows/system32/cmd.exe";
prcssStrtInfo.Arguments = @"/c net view > D:\LanMachineName.txt";
prcssStrtInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
System.Diagnostics.Process.Start(prcssStrtInfo);
}
private void liezhu()
{
// StreamReader sr = new StreamReader(path, Encoding.Default)

//string upStr = File.ReadAllText(filePath, Encoding.Default);

StreamReader sr = new StreamReader(@"D:\LanMachineName.txt", Encoding.Default);
string content = sr.ReadToEnd();
string[] str = content.Split(new string[] { "\r\n" }, StringSplitOptions.None);
for (int i = 0; i < str.Length; i++)
{
if (str[i].Contains("\\"))
{
listBox1.Items.Add(str[i]);
};


}
}
private void Button2_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex > -1)
{
string lins = listBox1.SelectedItem.ToString();
lins = lins.Substring(0, lins.IndexOf(" "));
dakaiwenjianj(lins); ;
}

}
这是主要的代码,求大神指点
...全文
444 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
ping一圈已经存在的计算机名,用返回信息就可以判断在线了,这是Samba协议的问题导致的下线电脑不能马上刷新。
  • 打赏
  • 举报
回复
想了好久 还是觉得用遍历IP 再手动备注的方式好点,谢谢.主要是简单,自己现有能力能够做到
  • 打赏
  • 举报
回复
还需要学俩个地方...一个是你说的这个协议,一个是那些什么同步异步.......
  • 打赏
  • 举报
回复
引用 6 楼 胖叔叔写代码 的回复:
https://github.com/eflexsystems/csharp-samba-client 如果你想深入点看问题,可以看看这个开源项目 当然希望你看这个之前先看看samba协议的相关资料。
下载了,说实话,看不明白,还在慢慢看。遍历已有主机名,会漏掉电脑,,,有些电脑明明已经开机了,快捷方式已经可以进共享了,但是搜索结果里面没这个电脑
  • 打赏
  • 举报
回复
https://github.com/eflexsystems/csharp-samba-client 如果你想深入点看问题,可以看看这个开源项目 当然希望你看这个之前先看看samba协议的相关资料。
  • 打赏
  • 举报
回复
引用 2 楼 baidu_36581798 的回复:
[quote=引用 1 楼 胖叔叔写代码 的回复:] ping一圈已经存在的计算机名,用返回信息就可以判断在线了,这是Samba协议的问题导致的下线电脑不能马上刷新。
兄弟 你这个方法有个问题就是开机了,但是没名单的电脑会漏掉...所以我又找了个遍历IP的方法....但是. 刚刚用了个遍历192.168.1.1-192.168.1.255的方法,全部PING 一遍,新的问题出来了,通过对应IP获取电脑名称,,,,然后用网上方法总是提示"不知道这样的主机”[/quote] 所以跟你说,遍历已有主机名,别想着遍历ip,别人没开samba你怎么连?
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
现在只能通过IP 直接打开,想到的方法就是 手动加个对应列表....出现未知的IP 了 就手动查清楚电脑名 然后加上去.....但是别人改名了 还是布知道
  • 打赏
  • 举报
回复
引用 1 楼 胖叔叔写代码 的回复:
ping一圈已经存在的计算机名,用返回信息就可以判断在线了,这是Samba协议的问题导致的下线电脑不能马上刷新。
兄弟 你这个方法有个问题就是开机了,但是没名单的电脑会漏掉...所以我又找了个遍历IP的方法....但是. 刚刚用了个遍历192.168.1.1-192.168.1.255的方法,全部PING 一遍,新的问题出来了,通过对应IP获取电脑名称,,,,然后用网上方法总是提示"不知道这样的主机”

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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