.net 如何确定文件共享服务器是否联机?
如果我想检查服务器的可用性,但我不知道它的共享,我可以在Windows资源管理器窗口中键入它的UNC名称(或IP地址),即使不带服务器共享目录也可以: 我如何在.NET中以编程方式使用它来验证服务器是否在线?我正在尝试.net 如何确定文件共享服务器是否联机?,.net,vb.net,.net,Vb.net,如果我想检查服务器的可用性,但我不知道它的共享,我可以在Windows资源管理器窗口中键入它的UNC名称(或IP地址),即使不带服务器共享目录也可以: 我如何在.NET中以编程方式使用它来验证服务器是否在线?我正在尝试 My.Computer.FileSystem.DirectoryExists(UNCPath) 但这仅适用于UNC路径,如\\MY\u SERVER\Users,它不能与\\MY\u SERVER一起使用 我希望避免Ping并坚持使用文件系统工作时可用的功能,因为某些服务器可
My.Computer.FileSystem.DirectoryExists(UNCPath)
但这仅适用于UNC路径,如\\MY\u SERVER\Users
,它不能与\\MY\u SERVER
一起使用
我希望避免Ping并坚持使用文件系统工作时可用的功能,因为某些服务器可能由于安全原因禁用ICMP_ECHO
(如果您想发布一些代码,请随意选择VB或C。)编辑:
我接到通知,这可能是重复的解决方案。不同之处在于,另一个问题接受了对我来说实际不起作用的答案,我有理由认为在这种情况下使用WMI是一种限制方法(它需要凭证,见下文)。在这个答案中,我给出了一个真正适合我的方法。
但是如果你真的认为它是重复的,继续标记它以结束,我将删除整个问题,因为它是不必要的
我一直在继续学习和尝试,最后我决定使用TCP端口139,同样的。考虑下面的源作为一个草案(并且不要忘记处理异常等),但最后我可以有一段代码,似乎对我工作:
公共共享函数是FileShareServerOnline(PCName作为字符串,
超时(作为整数)作为布尔值
Const Port As Integer=139'端口用于文件共享服务
标注为布尔值的等值线=False
Dim IP As Net.IPAddress=Net.Dns.GetHostAddresses(PCName)(0)
Dim地址为Net.IPAddress=Net.IPAddress.Parse(IP.ToString())
作为Net.Sockets.TcpClient的Dim套接字=新的Net.Sockets.TcpClient(Address.AddressFamily)
Dim Connect=Socket.BeginConnect(地址、端口、无、无)
Dim WaitingResult=Connect.AsyncWaitHandle.WaitOne(超时,False)
如果(Connect.IsCompleted),则
如果结果是这样的话
Socket.EndConnect(连接)
IsOnline=True
如果结束
如果结束
Socket.Close()
返回等值线
端函数
该代码存在一个问题,即在第一次运行时,即使远程计算机可用,它也无法检测到。在重试时,它工作。只要在较长时间后尝试连接,问题就会再次出现(一次错误检测)。我不是了解原因的TCP/IP专家,可能我使用的超时时间太短(1秒)。解决方法是至少尝试两次连接
在尝试这种方法之前,我还实现并测试了基于WMI的查询,但是如果没有事先在远程计算机上进行身份验证,它们就无法工作。在我的场景中,这是非常无用的。什么是
我的.computer.FileSystem…
?我认为问题是因为“\\my_SERVER”
不是一个目录,而是一个服务器名<代码>“\\MY\u SERVER\Users”是一个目录,就共享内容而言,它是根目录,因此没有父目录供您检查。@musefanMy.Computer.FileSystem
是一个不存在的问题。没有一个答案是重复的问题,我为您链接了工作?@musefan建议的解决方案给出了使用WMI检查远程服务的可用性的提示,这有助于文件管理和共享服务。这将显示服务器的可用性。我没有使用WMI的经验,所以我不确定在远程计算机上没有事先验证的情况下是否可以做到这一点。所以我留下这个问题,也许有人可以在这里补充一个好的答案。