Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查计算机是否从C响应#_C#_Networking_Netbios - Fatal编程技术网

C# 如何检查计算机是否从C响应#

C# 如何检查计算机是否从C响应#,c#,networking,netbios,C#,Networking,Netbios,检查计算机是否处于活动状态并有响应(例如ping/NetBios)的最简单方法是什么? 我想要一个确定的方法,我可以限制时间 一种解决方案是在单独的线程中简单地访问共享(File.GetDirectories(@“\compname”)),如果需要的时间太长,就杀死该线程。简单!使用System.Net.NetworkInformationnamespace的ping功能 要检查已知服务器上的特定TCP端口(myPort),请使用以下代码段。您可以捕获System.Net.Sockets.Soc

检查计算机是否处于活动状态并有响应(例如ping/NetBios)的最简单方法是什么? 我想要一个确定的方法,我可以限制时间


一种解决方案是在单独的线程中简单地访问共享(File.GetDirectories(@“\compname”)),如果需要的时间太长,就杀死该线程。

简单!使用
System.Net.NetworkInformation
namespace的ping功能


要检查已知服务器上的特定TCP端口(
myPort
),请使用以下代码段。您可以捕获
System.Net.Sockets.SocketException
异常以指示端口不可用

using System.Net;
using System.Net.Sockets;
...

IPHostEntry myHostEntry = Dns.GetHostByName("myserver");
IPEndPoint host = new IPEndPoint(myHostEntry.AddressList[0], myPort);

Socket s = new Socket(AddressFamily.InterNetwork,
    SocketType.Stream, ProtocolType.Tcp);
s.Connect(host);

此外,专门的检查可以在套接字超时的情况下尝试IO。

只要您想检查自己子网内的计算机,就可以使用它进行检查。下面是一个例子:

    //for sending an arp request (see pinvoke.net)
    [DllImport("iphlpapi.dll", ExactSpelling = true)]
    public static extern int SendARP(
                                        int DestIP, 
                                        int SrcIP, 
                                        byte[] pMacAddr, 
                                        ref uint PhyAddrLen);


    public bool IsComputerAlive(IPAddress host)
    {
        //can't check the own machine (assume it's alive)
        if (host.Equals(IPAddress.Loopback))
            return true;

        //Prepare the magic

        //this is only needed to pass a valid parameter
        byte[] macAddr = new byte[6];
        uint macAddrLen = (uint)macAddr.Length;

        //Let's check if it is alive by sending an arp request
        if (SendARP((int)host.Address, 0, macAddr, ref macAddrLen) == 0)
            return true; //Igor it's alive!

        return false;//Not alive
    }

有关更多信息,请参阅。

您需要连接到哪个端口?考虑到防火墙——网络范围和每个系统——一个系统可能很容易可用,但如果您选择了错误的端口进行尝试,系统似乎没有响应。顺便说一句,我想说的是,当涉及到网络时,根据定义,不可能存在“确定性”方法。出于安全原因,PING是在我们的网络边界被阻止的服务之一——以及其他各种端口。如果可用,这是一个很好的机制,但您必须知道它是否会首先工作,并且将来不会关闭。事实上,这可能发生在任何服务上。因此,如果需要可靠的方法来在远程计算机上实现服务,那么您应该考虑在更高级协议(您特别依赖的协议)上检查它。