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

时间:2008-12-07 13:31:11

标签: c# networking netbios

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

一个解决方案是在一个单独的线程中简单地访问共享(File.GetDirectories(@“\ compname”)),如果花费太长时间就终止它。

3 个答案:

答案 0 :(得分:10)

轻松!使用System.Net.NetworkInformation命名空间的ping工具!

http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx

答案 1 :(得分:3)

要检查已知服务器上的特定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超时。

答案 2 :(得分:1)

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

    //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
    }

有关详细信息,请参阅Pinvoke.net