通过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


SHELL脚本:检测一坨IP是否都能ping通(网卡监控)

http://blog.chinaunix.net/uid-22101889-id-3166971.html 工作快3年了,期间遇见过不少problems,每次都是上网搜之、解决了就...
  • fyh2003
  • fyh2003
  • 2015年07月14日 16:36
  • 6538

Java学习篇之--检测主机是否在线Ping

Ping技术哪家强?         最近想写个程序,检测一下远程主机是否在线,于是在网上找到了很多前辈的方法,现在总结一下,分享给大家,希望能够抛砖引玉:         方法一:利用java.ne...
  • A_little_e
  • A_little_e
  • 2015年03月24日 15:51
  • 1306

判断任意两台计算机的IP地址是否属于同一子网络

子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。 最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网...
  • boshift
  • boshift
  • 2015年03月22日 21:37
  • 1737

使用Ping检测远程计算机 小例子,C++.net源代码编写

  • 2010年03月15日 20:45
  • 2.23MB
  • 下载

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

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

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

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

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

前提:1安装“远程桌面连接工具”升级到6.1版。          2.Windows 版本升级到:XP SP3。   本文介绍如何通过修改注册表为Windows XP SP3增加网络身份验证...
  • fightzhcg
  • fightzhcg
  • 2013年12月11日 15:10
  • 629

要登录到这台远程计算机 必须被授予允许通过终端服务登录的权限

您必须被授予允许通过终端服务登录的权限 终端服务器授权
  • uiwgi
  • uiwgi
  • 2016年12月03日 13:43
  • 6997

远程计算机需要网络级别身份验证

最近在11教物电这边上实验课,很想远程楼上机房的电脑,从前连不上也就算了,今天突然就特别想连上,但是还是有问题,充分说明这不是我电脑的问题,是实验室机房电脑的问题,于是带着试试的心态寻找解决办法。结果...
  • Alisawxn
  • Alisawxn
  • 2016年06月01日 11:07
  • 1179

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

远程计算机需要网络级别身份验证,你的系统不支持 故障:“远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者 技术人员来获得帮助” 故障症状:当您使用W...
  • lijia900924
  • lijia900924
  • 2014年01月15日 12:23
  • 538
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过Ping来判断一个远程计算机是否可以到达
举报原因:
原因补充:

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