如何判断文件共享服务器是不是在线? [复制]
Posted
技术标签:
【中文标题】如何判断文件共享服务器是不是在线? [复制]【英文标题】:How to determine whether file share server is online? [duplicate]如何判断文件共享服务器是否在线? [复制] 【发布时间】:2014-02-21 11:30:20 【问题描述】:如果我想检查服务器的可用性,但我不知道它的共享,我可以在 Windows 资源管理器窗口中输入它的 UNC 名称(或 IP 地址),即使 没有服务器共享目录:: p>
如何在 .NET 中以编程方式使用它来验证服务器是否在线?我正在尝试
My.Computer.FileSystem.DirectoryExists(UNCPath)
但这仅适用于\\MY_SERVER\Users
等UNC 路径,不适用于\\MY_SERVER
。
我想避免 Ping 并坚持使用在文件系统工作时有效的功能,因为出于安全原因,某些服务器可能会禁用 ICMP_ECHO。
(如果您想发布一些代码,请随意选择 VB 或 C#。)
【问题讨论】:
什么是My.Computer.FileSystem...
?
我认为问题在于"\\MY_SERVER"
不是目录,而是服务器名称。 "\\MY_SERVER\Users"
是一个目录,它是共享内容的根目录,因此没有父目录供您检查。
@musefan My.Computer.FileSystem
是VB-exclusive convenience for functionalities from System.IO.File
难道没有一个答案是我为您链接的重复问题吗?
@musefan 建议的解决方案提示使用 WMI 检查远程服务的可用性,这有助于文件和共享服务。这应该显示服务器的可用性。我没有使用 WMI 的经验,所以我不确定是否可以在没有事先在远程计算机上进行身份验证的情况下完成。因此,我将这个问题悬而未决,也许有人仍然可以在这里添加一个好的答案。
【参考方案1】:
编辑: 我被告知这可能与Q/A mentioned elsewhere 的解决方案重复。不同之处在于,另一个问题接受对我来说真的不起作用的答案,我有理由认为在这种情况下使用 WMI 是一种限制方法(它需要凭据, 见下文)。在这个答案中,我给出了一种真正适合我的方法。 但是,如果您真的认为它是重复的,请继续将其标记为关闭,我会将整个问题删除为不必要的。
我继续学习和尝试,最后我确定使用TCP port 139
,同样是used by file sharing mechanism。将以下源视为草稿(不要忘记处理异常等),但最后我可以得到一段似乎对我有用的代码:
Public Shared Function IsFileShareServerOnline(PCName As String,
Timeout as Integer) As Boolean
Const Port As Integer = 139 'port for file sharing service
Dim IsOnline As Boolean = False
Dim IP As Net.IPAddress = Net.Dns.GetHostAddresses(PCName)(0)
Dim Address As Net.IPAddress = Net.IPAddress.Parse(IP.ToString())
Dim Socket As Net.Sockets.TcpClient = New Net.Sockets.TcpClient(Address.AddressFamily)
Dim Connect = Socket.BeginConnect(Address, Port, Nothing, Nothing)
Dim WaitingResult = Connect.AsyncWaitHandle.WaitOne(Timeout, False)
If (Connect.IsCompleted) Then
If WaitingResult Then
Socket.EndConnect(Connect)
IsOnline = True
End If
End If
Socket.Close()
Return IsOnline
End Function
代码有一个问题,即在首次运行时它无法检测到远程计算机,即使可用。重试后它可以工作。只要在较长时间后尝试连接,问题就会更新(一次错误检测)。我不是 TCP/IP 专家,无法理解原因,也许我使用的超时时间太短(1 秒)。一种解决方法是至少进行 2 次连接尝试。
在尝试这种方法之前,我还实现并测试了基于 WMI 的查询,但是如果没有在远程计算机上事先进行身份验证,它们就无法工作,这在我的场景中是非常无用的。
【讨论】:
以上是关于如何判断文件共享服务器是不是在线? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何确定将大量文件复制到外部共享文件夹的理想并行Java线程数?