//检查网络连接
public static string CmdPing(string _strHost)
{
string m_strHost = _strHost;

Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
string pingrst = string.Empty;
process.StartInfo.Arguments = "ping " + m_strHost + " -n 1";
process.Start();
process.StandardInput.AutoFlush = true;
string temp = "ping " + m_strHost + " -n 1" ;
process.StandardInput.WriteLine(temp);
process.StandardInput.WriteLine("exit");
string strRst = process.StandardOutput.ReadToEnd();
if(strRst.IndexOf("(0% loss)")!=-1)
pingrst = "连接";
else if( strRst.IndexOf("Destination host unreachable.")!=-1)
pingrst = "无法到达目的主机";
else if(strRst.IndexOf("Request timed out.")!=-1)
pingrst = "超时";
else if(strRst.IndexOf("Unknown host")!=-1)
pingrst = "无法解析主机";
else
pingrst = strRst;
process.Close(); return pingrst ;
}
另参考:http://community.csdn.net/Expert/topic/3418/3418954.xml?temp=.1656153

解决方案 »

  1.   

    是个控制台程序
    using System;
    using System.Net;
    using System.Net.Sockets;namespace ConsoleApplicationWinPing
    {
    /// <summary>
    /// Ping 的摘要说明。
    /// </summary>
    class Ping
    { const int SOCKET_ERROR = -1;
    const int ICMP_ECHO = 8;
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] arvs)
    {
    string[] args = new string[1];
    args[0] = "192.168.1.154";
    if(args.Length == 0)
    {
    System.Console.WriteLine("用法:Ping <hostname> /r");
    System.Console.WriteLine("<hostname> 你要测试的远程主机");
    System.Console.WriteLine("/r 选项开关,如果要连续测试时使用"); }
    else if(args.Length == 1)
    {
    PingHost(args[0]);
    System.Console.ReadLine(); }
    else if(args.Length == 2)
    {
    if(args[1] == "/r")
    {
    while(true)
    {
    PingHost(args[0]);
    }
    }
    else
    {
    PingHost(args[0]);
    }
    }
    else
    {
    System.Console.WriteLine("Error in Arguments");
    }
    }
    public static UInt16 checksum(UInt16[] buffer,int size)
    {
    Int32 cksum = 0;
    int counter = 0;
    while (size>0)
    {
    UInt16 val = buffer[counter];
    cksum += Convert.ToInt32(buffer[counter]);
    counter++;
    size--;
    } cksum = (cksum >> 16)+(cksum & 0xffff);
    cksum += (cksum >> 16);
    return (UInt16)(~cksum); }
    public static Int32 Serialize( IcmpPacket packet,Byte[] Buffer,Int32 PacketSize,Int32 PingData)
    {
    Int32 cbReturn = 0;
    int Index = 0;
    Byte[] b_type = new Byte[1];
    b_type[0] = (packet.Type); Byte[] b_code = new Byte[1];
    b_code[0] = (packet.SubCode); Byte[] b_cksum = BitConverter.GetBytes(packet.CheckSum);
    Byte[] b_id = BitConverter.GetBytes(packet.Identifier);
    Byte[] b_seq = BitConverter.GetBytes(packet.SequenceNumber); Array.Copy(b_type,0,Buffer,Index,b_type.Length);
    Index += b_type.Length; Array.Copy(b_code,0,Buffer,Index,b_code.Length);
    Index += b_code.Length; Array.Copy(b_cksum,0,Buffer,Index,b_cksum.Length);
    Index += b_cksum.Length; Array.Copy(b_id,0,Buffer,Index,b_id.Length);
    Index += b_id.Length; Array.Copy(b_seq,0,Buffer,Index,b_seq.Length);
    Index += b_seq.Length; Array.Copy(packet.Data,0,Buffer,Index,PingData);
    Index += PingData; if(Index != PacketSize)
    {
    cbReturn = -1;
    return cbReturn;
    }
    cbReturn = Index;
    return cbReturn;
    }
    public static void PingHost(string host)
    {
    IPHostEntry serverHE,fromHE;
    int nBytes = 0;
    int dwStart = 0; 
    int dwStop = 0; Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.Icmp); try
    {
    serverHE = Dns.GetHostByName(host);
    }
    catch(Exception)
    {
    System.Console.WriteLine("目标主机不存在");
    return;
    } IPEndPoint ipepServer = new IPEndPoint(serverHE.AddressList[0],0);
    EndPoint epServer = (ipepServer); fromHE = Dns.GetHostByName(Dns.GetHostName());
    IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList[0],0);
    EndPoint EndPointFrom = (ipEndPointFrom); int PacketSize = 0;
    IcmpPacket packet = new IcmpPacket(); packet.Type = ICMP_ECHO;
    packet.SubCode = 0;
    packet.CheckSum = UInt16.Parse("0");
    packet.Identifier = UInt16.Parse("45");
    packet.SequenceNumber = UInt16.Parse("0"); int PingData = 32;
    packet.Data = new Byte[PingData]; for(int i=0;i<PingData;i++)
    {
    packet.Data[i] = (byte)'#';
    } PacketSize = PingData + 8; Byte[] icmp_pkt_buffer = new Byte[PacketSize]; Int32 Index = 0; Index = Serialize(packet,icmp_pkt_buffer,PacketSize,PingData); if(Index == -1)
    {
    System.Console.WriteLine("Error in Making Packet");
    return;
    } Double double_length = Convert.ToDouble(Index);
    Double dtemp = Math.Ceiling(double_length/2);
    int cksum_buffer_length = Convert.ToInt32(dtemp); UInt16[] cksum_buffer = new UInt16[cksum_buffer_length]; int icmp_header_buffer_index = 0;
    for(int i=0;i<cksum_buffer_length;i++)
    {
    cksum_buffer[i] = BitConverter.ToUInt16(icmp_pkt_buffer,icmp_header_buffer_index);
    icmp_header_buffer_index += 2;
    } UInt16 u_cksum = checksum(cksum_buffer,cksum_buffer_length); packet.CheckSum = u_cksum; Byte[] sendbuf = new Byte[PacketSize];
    Index = Serialize(packet,sendbuf,PacketSize,PingData); if(Index == -1)
    {
    System.Console.WriteLine("Error in Making Packet");
    return;
    } dwStart = System.Environment.TickCount; if((nBytes = socket.SendTo(sendbuf,PacketSize,0,epServer)) == SOCKET_ERROR)
    {
    System.Console.WriteLine("Socket Error can not Sending Packet");
    } Byte[] ReceiveBuffer = new Byte[256];
    nBytes = 0; bool recd = false;
    int timeout = 0; while(!recd)
    {
    nBytes = socket.ReceiveFrom(ReceiveBuffer,256,0,ref EndPointFrom);
    if(nBytes == SOCKET_ERROR)
    {
    System.Console.WriteLine("Host not Responding");
    recd = true;
    break;
    }
    else if(nBytes > 0)
    {
    dwStop = System.Environment.TickCount - dwStart;
    Console.WriteLine("Reply from"+epServer.ToString()+":bytes = "+ nBytes.ToString()+"time = "+dwStop +"ms");
    recd = true;
    break;
    } timeout = System.Environment.TickCount - dwStart;
    if(timeout > 1000)
    {
    System.Console.WriteLine("Time Out");
    recd = true;
    }
    }
    socket.Close();
     
    }
    } /// <summary>
    /// IcmpPacket 的摘要说明。
    /// </summary>
    public class IcmpPacket
    {
    public IcmpPacket()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    } public Byte Type;
    public Byte SubCode;
    public UInt16 CheckSum;
    public UInt16 Identifier;
    public UInt16 SequenceNumber;
    public Byte[] Data;
    }
    }
      

  2.   

    http://blog.csdn.net/zhzuo/archive/2004/03/21/22024.aspx
      

  3.   

    public static string CmdPing(string _strHost)
    {
    string m_strHost = _strHost;Process process = new Process();
    process.StartInfo.FileName = "cmd.exe";
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardInput = true;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardError = true;
    process.StartInfo.CreateNoWindow = true;
    string pingrst = string.Empty;
    process.StartInfo.Arguments = "ping " + m_strHost + " -n 1";
    process.Start();
    process.StandardInput.AutoFlush = true;
    string temp = "ping " + m_strHost + " -n 1" ;
    process.StandardInput.WriteLine(temp);
    process.StandardInput.WriteLine("exit");
    string strRst = process.StandardOutput.ReadToEnd();
    if(strRst.IndexOf("(0% loss)")!=-1)
    pingrst = "连接";
    else if( strRst.IndexOf("Destination host unreachable.")!=-1)
    pingrst = "无法到达目的主机";
    else if(strRst.IndexOf("Request timed out.")!=-1)
    pingrst = "超时";
    else if(strRst.IndexOf("Unknown host")!=-1)
    pingrst = "无法解析主机";
    else
    pingrst = strRst;
    process.Close();return pingrst ;
    }
      

  4.   

    之间调用cmd进程,然后在调用ping命令就行了
      

  5.   

    private static string CmdPing(string strIp)         {              Process p = new Process();              p.StartInfo.FileName = "cmd.exe";              p.StartInfo.UseShellExecute = false;              p.StartInfo.RedirectStandardInput = true;              p.StartInfo.RedirectStandardOutput = true;              p.StartInfo.RedirectStandardError = true;              p.StartInfo.CreateNoWindow = true;              string pingrst;              p.Start();              p.StandardInput.WriteLine("ping -n 1 "+strIp);              p.StandardInput.WriteLine("exit");              string strRst = p.StandardOutput.ReadToEnd();              if(strRst.IndexOf("(0% loss)")!=-1)                   pingrst = "连接";              else if( strRst.IndexOf("Destination host unreachable.")!=-1)                   pingrst = "无法到达目的主机";              else if(strRst.IndexOf("Request timed out.")!=-1)                   pingrst = "超时";              else if(strRst.IndexOf("Unknown host")!=-1)                   pingrst = "无法解析主机";              else                   pingrst = strRst;              p.Close();              return pingrst;         }这个要直接一点