通过Ping来判断一个远程计算机是否可以到达

转载 2012年03月31日 09:31:23
简单的实现方式:
using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;

namespace Examples.System.Net.NetworkInformation.PingTest
{
    public class PingExample
    {
        // args[0] can be an IPaddress or host name.
        public static void Main (string[] args)
        {
            Ping pingSender = new Ping ();
            PingOptions options = new PingOptions ();

            // Use the default Ttl value which is 128,
            // but change the fragmentation behavior.
            options.DontFragment = true;

            // Create a buffer of 32 bytes of data to be transmitted.
            string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
            byte[] buffer = Encoding.ASCII.GetBytes (data);
            int timeout = 120;
            PingReply reply = pingSender.Send (args[0], timeout, buffer, options);
            if (reply.Status == IPStatus.Success)
            {
                Console.WriteLine ("Address: {0}", reply.Address.ToString ());
                Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
                Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
                Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
                Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
            }
        }
    }
}


Ping类异步的调用实现方式:

using System;
using System.Text;
using System.Net;
using System.Net.NetworkInformation;
using System.ComponentModel;
using System.Threading;

namespace Examples.System.Net.NetworkInformation.PingTest
{
    public class PingExample
    {
        public static void Main (string[] args)
        {
            if (args.Length == 0)
                throw new ArgumentException ("Ping needs a host or IP Address.");

            string who = args[0];
            AutoResetEvent waiter = new AutoResetEvent (false);

            Ping pingSender = new Ping ();

            // When the PingCompleted event is raised,
            // the PingCompletedCallback method is called.
            pingSender.PingCompleted += new PingCompletedEventHandler (PingCompletedCallback);

            // Create a buffer of 32 bytes of data to be transmitted.
            string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
            byte[] buffer = Encoding.ASCII.GetBytes (data);

            // Wait 12 seconds for a reply.
            int timeout = 12000;

            // Set options for transmission:
            // The data can go through 64 gateways or routers
            // before it is destroyed, and the data packet
            // cannot be fragmented.
            PingOptions options = new PingOptions (64, true);

            Console.WriteLine ("Time to live: {0}", options.Ttl);
            Console.WriteLine ("Don't fragment: {0}", options.DontFragment);

            // Send the ping asynchronously.
            // Use the waiter as the user token.
            // When the callback completes, it can wake up this thread.
            pingSender.SendAsync(who, timeout, buffer, options, waiter);

            // Prevent this example application from ending.
            // A real application should do something useful
            // when possible.
            waiter.WaitOne ();
            Console.WriteLine ("Ping example completed.");
        }

        public static void PingCompletedCallback (object sender, PingCompletedEventArgs e)
        {
            // If the operation was canceled, display a message to the user.
            if (e.Cancelled)
            {
                Console.WriteLine ("Ping canceled.");

                // Let the main thread resume. 
                // UserToken is the AutoResetEvent object that the main thread 
                // is waiting for.
                ((AutoResetEvent)e.UserState).Set ();
            }

            // If an error occurred, display the exception to the user.
            if (e.Error != null)
            {
                Console.WriteLine ("Ping failed:");
                Console.WriteLine (e.Error.ToString ());

                // Let the main thread resume. 
                ((AutoResetEvent)e.UserState).Set();
            }

            PingReply reply = e.Reply;

            DisplayReply (reply);

            // Let the main thread resume.
            ((AutoResetEvent)e.UserState).Set();
        }

        public static void DisplayReply (PingReply reply)
        {
            if (reply == null)
                return;

            Console.WriteLine ("ping status: {0}", reply.Status);
            if (reply.Status == IPStatus.Success)
            {
                Console.WriteLine ("Address: {0}", reply.Address.ToString ());
                Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
                Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
                Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
                Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
            }
        }
    }
}
转自:http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping(v=vs.80).aspx


相关文章推荐

自己写个ping程序玩玩---附带抓包

ping功能很常用, 在Windows/Linux上, 我们经常用ping功能来探测对方是否在线。 那么, ping到底是怎么实现的呢? 在本文中, 我们自己来写一个ping, 当然, 功能肯定没有W...
  • stpeace
  • stpeace
  • 2015年02月01日 18:59
  • 3667

解决win10系统 L2TP连接尝试失败:ERROR因为安全层在初始化与远程计算机的协商时遇到了一个处理错误

错误描述:当连接VPN是回传错误为“ L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误” 操作系统:win10家庭版 VPN设置: 常规选项:配置了需要连接目标se...
  • minxihou
  • minxihou
  • 2016年07月30日 18:51
  • 47028

Unity3D RPC(远程过程调用)细节__让你调用一个远程计算机的函数

RPC Details 远程过程调用(RPC)让你调用一个远程计算机的函数。就好像调用一个普通函数一样容易,但也需要理解 一些重要的不同。 只要你喜欢,RPC调用可以有很多参数。所有的参数将...

远程计算机需要网络级别身份验证,你的系统不支持

远程计算机需要网络级别身份验证,你的系统不支持 故障:“远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者 技术人员来获得帮助” 故障症状:当您使用W...

WMI_远程计算机配置

1 用户设置。     WMI远程访问需要使用一个具有管理员权限的用户,并且用户必须有密码。如果用已经建好的用户可以直接从 1.2配置用户 开始。     1.1新建一个用户         1)右击...
  • zxh2075
  • zxh2075
  • 2013年10月25日 17:20
  • 890

使用C#控制远程计算机的服务

http://www.cnblogs.com/onekey/archive/2004/08/25/36513.html 在.net中提供了一些类来显示和控制Windows系统上的服务,并可以实现对远程...

远程计算机已结束连接

如果解决在连接3389远程时出现的这个问题"远程计算机已结束连接"      打开注册表,找到 HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Enum\...

客户端无法建立跟远程计算机的连接 错误解决办法

客户端无法建立跟远程计算机的连接 出现的提示如下: --------------------------- 中断远程桌面连接 --------------------------- 客...

"远程计算机需要网络级别身份验证,你的系统不支持"的解决办法

前提:1安装“远程桌面连接工具”升级到6.1版。          2.Windows 版本升级到:XP SP3。   本文介绍如何通过修改注册表为Windows XP SP3增加网络身份验证...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过Ping来判断一个远程计算机是否可以到达
举报原因:
原因补充:

(最多只允许输入30个字)