Ping.Send 方法

定义

尝试将 Internet 控制消息协议 (ICMP) 回送消息发送到远程计算机并接收来自远程计算机的相应 ICMP 回送答复消息。

重载

Send(String, TimeSpan, Byte[], PingOptions)

尝试将 Internet 控制消息协议 (ICMP) 回显消息发送到指定的计算机,并从该计算机接收相应的 ICMP 回送答复消息。

Send(String, Int32, Byte[], PingOptions)

尝试用指定的数据缓冲区将 Internet 控制消息协议 (ICMP) 回显消息发送到指定计算机,然后从该计算机接收对应的 ICMP 回显回复消息。 此重载允许您指定操作的超时值,并控制 ICMP 数据包的碎片和生存时间值。

Send(IPAddress, TimeSpan, Byte[], PingOptions)

尝试将 Internet 控制消息协议 (ICMP) 回显消息发送到具有指定 IPAddress的计算机,并从该计算机接收相应的 ICMP 回送答复消息。

Send(IPAddress, Int32, Byte[], PingOptions)

尝试将包含指定数据缓冲区的 Internet 控制消息协议 (ICMP) 回送消息发送到具有指定 IPAddress 的计算机,并接收来自该计算机的相应 ICMP 回送答复消息。 此重载允许您指定操作的超时值,并控制 ICMP 回显消息数据包的碎片和生存时间值。

Send(String, Int32, Byte[])

尝试用指定的数据缓冲区将 Internet 控制消息协议 (ICMP) 回显消息发送到指定计算机,然后从该计算机接收对应的 ICMP 回显回复消息。 此重载使您可以为操作指定一个超时值。

Send(IPAddress, Int32, Byte[])

尝试将包含指定数据缓冲区的 Internet 控制消息协议 (ICMP) 回送消息发送到具有指定的 IPAddress 的计算机,并接收来自该计算机的相应 ICMP 回送应答消息。 此重载使您可以为操作指定一个超时值。

Send(String, Int32)

尝试向指定的计算机发送 Internet 控制消息协议 (ICMP) 回送消息,并从该计算机接收相应的 ICMP 回送答复消息。 使用此方法可以为操作指定一个超时值。

Send(IPAddress, Int32)

尝试将包含指定数据缓冲区的 Internet 控制消息协议 (ICMP) 回送消息发送到具有指定的 IPAddress 的计算机,并接收来自该计算机的相应 ICMP 回送应答消息。 使用此方法可以为操作指定一个超时值。

Send(String)

尝试向指定的计算机发送 Internet 控制消息协议 (ICMP) 回送消息,并从该计算机接收相应的 ICMP 回送答复消息。

Send(IPAddress)

尝试将 Internet 控制消息协议 (ICMP) 回送消息发送到具有指定 IPAddress 的计算机,并接收来自该计算机的相应 ICMP 回送答复消息。

注解

任何重载返回的 Send IP 地址都可能源自恶意远程计算机。 请勿使用此连接到远程计算机。 使用 DNS 确定要连接到的计算机的 IP 地址。

Send(String, TimeSpan, Byte[], PingOptions)

Source:
Ping.cs
Source:
Ping.cs
Source:
Ping.cs

尝试将 Internet 控制消息协议 (ICMP) 回显消息发送到指定的计算机,并从该计算机接收相应的 ICMP 回送答复消息。

public:
 System::Net::NetworkInformation::PingReply ^ Send(System::String ^ hostNameOrAddress, TimeSpan timeout, cli::array <System::Byte> ^ buffer, System::Net::NetworkInformation::PingOptions ^ options);
public System.Net.NetworkInformation.PingReply Send (string hostNameOrAddress, TimeSpan timeout, byte[]? buffer, System.Net.NetworkInformation.PingOptions? options);
member this.Send : string * TimeSpan * byte[] * System.Net.NetworkInformation.PingOptions -> System.Net.NetworkInformation.PingReply
Public Function Send (hostNameOrAddress As String, timeout As TimeSpan, buffer As Byte(), options As PingOptions) As PingReply

参数

hostNameOrAddress
String

一个 String,它标识作为 ICMP 回送消息目标的计算机。 为此参数指定的值可以是主机名,也可以是以字符串形式表示的 IP 地址。

timeout
TimeSpan

一个 值,该值指定发送回显消息) 等待 ICMP 回送答复消息后 (的最长时间。

buffer
Byte[]

一个 Byte 数组,它包含要与 ICMP 回送消息一起发送并在 ICMP 回送应答消息中返回的数据。 该数组包含的字节数不能超过 65,500 个字节。

options
PingOptions

一个 PingOptions 对象,用于控制 ICMP 回显消息数据包的碎片和生存时间值。

返回

有关 ICMP 回送答复消息(如果已收到)或失败原因(如果未收到消息)的信息。

例外

bufferhostNameOrAddressnullhostNameOrAddress 是空字符串 (“”) 。

timeout 表示小于零毫秒或大于 MaxValue 毫秒的时间。

buffer的大小大于 65,500 字节。

正在调用 SendAsync。

发送或接收 ICMP 消息时引发异常。 请参见内部异常,以确切地了解所引发的异常。

已释放此对象。

适用于

Send(String, Int32, Byte[], PingOptions)

Source:
Ping.cs
Source:
Ping.cs
Source:
Ping.cs

尝试用指定的数据缓冲区将 Internet 控制消息协议 (ICMP) 回显消息发送到指定计算机,然后从该计算机接收对应的 ICMP 回显回复消息。 此重载允许您指定操作的超时值,并控制 ICMP 数据包的碎片和生存时间值。

public:
 System::Net::NetworkInformation::PingReply ^ Send(System::String ^ hostNameOrAddress, int timeout, cli::array <System::Byte> ^ buffer, System::Net::NetworkInformation::PingOptions ^ options);
public System.Net.NetworkInformation.PingReply Send (string hostNameOrAddress, int timeout, byte[] buffer, System.Net.NetworkInformation.PingOptions? options);
public System.Net.NetworkInformation.PingReply Send (string hostNameOrAddress, int timeout, byte[] buffer, System.Net.NetworkInformation.PingOptions options);
member this.Send : string * int * byte[] * System.Net.NetworkInformation.PingOptions -> System.Net.NetworkInformation.PingReply
Public Function Send (hostNameOrAddress As String, timeout As Integer, buffer As Byte(), options As PingOptions) As PingReply

参数

hostNameOrAddress
String

一个 String,它标识作为 ICMP 回送消息目标的计算机。 为此参数指定的值可以是主机名,也可以是以字符串形式表示的 IP 地址。

timeout
Int32

一个 Int32 值,指定(发送回送消息后)等待 ICMP 回送答复消息的最大毫秒数。

buffer
Byte[]

一个 Byte 数组,它包含要与 ICMP 回送消息一起发送并在 ICMP 回送应答消息中返回的数据。 该数组包含的字节数不能超过 65,500 个字节。

options
PingOptions

一个 PingOptions 对象,用于控制 ICMP 回显消息数据包的碎片和生存时间值。

返回

一个 PingReply 对象,如果收到了 ICMP 回显回复消息,则该对象提供相应消息的相关信息;如果未收到消息,则该对象提供失败原因。

例外

buffer 的大小超过 65500 字节。

hostNameOrAddressnull 或长度为零的字符串。

- 或 -

buffer 上声明的默认值为 null

timeout 小于零。

SendAsync 的调用正在进行中。

发送或接收 ICMP 消息时引发异常。 请参见内部异常,以确切地了解所引发的异常。

已释放此对象。

仅在 Linux 上提供 .NET 7 及更高版本:进程为非特权, buffer 且不为空。

示例

下面的代码示例演示如何调用此方法。

void ComplexPing()
{
   Ping ^ pingSender = gcnew Ping;
   
   // Create a buffer of 32 bytes of data to be transmitted.
   String^ data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
   array<Byte>^buffer = Encoding::ASCII->GetBytes( data );
   
   // Wait 10 seconds for a reply.
   int timeout = 10000;
   
   // 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 = gcnew PingOptions( 64,true );
   
   // Send the request.
   PingReply ^ reply = pingSender->Send( "www.contoso.com", 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 );
   }
   else
   {
      Console::WriteLine( reply->Status );
   }
}
public static void ComplexPing ()
{
    Ping pingSender = new Ping ();

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

    // Wait 10 seconds for a reply.
    int timeout = 10000;

    // 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);

    // Send the request.
    PingReply reply = pingSender.Send ("www.contoso.com", 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);
    }
    else
    {
        Console.WriteLine (reply.Status);
    }
}

注解

如果在 参数指定的 timeout 时间内未收到 ICMP 回送回复消息,则 ICMP 回送将失败,并将 Status 属性设置为 TimedOut

注意

当为 timeout指定非常小的数字时,即使 timeout 已过毫秒,也可以接收 Ping 回复。

DontFragment如果 属性为 ,true并且总数据包大小超过了本地和远程计算机之间某个路由节点可以传输的最大数据包大小,则 ICMP 回送请求将失败。 发生这种情况时, Status 设置为 PacketTooBig

Ttl使用 属性可以指定 ICMP 回送消息到达目标之前可以转发的最大次数。 如果数据包在被转发到指定次数后未到达其目标,则数据包将被丢弃,ICMP 回送请求将失败。 发生这种情况时, Status 设置为 TtlExpired

适用于

Send(IPAddress, TimeSpan, Byte[], PingOptions)

Source:
Ping.cs
Source:
Ping.cs
Source:
Ping.cs

尝试将 Internet 控制消息协议 (ICMP) 回显消息发送到具有指定 IPAddress的计算机,并从该计算机接收相应的 ICMP 回送答复消息。

public:
 System::Net::NetworkInformation::PingReply ^ Send(System::Net::IPAddress ^ address, TimeSpan timeout, cli::array <System::Byte> ^ buffer, System::Net::NetworkInformation::PingOptions ^ options);
public System.Net.NetworkInformation.PingReply Send (System.Net.IPAddress address, TimeSpan timeout, byte[]? buffer, System.Net.NetworkInformation.PingOptions? options);
member this.Send : System.Net.IPAddress * TimeSpan * byte[] * System.Net.NetworkInformation.PingOptions -> System.Net.NetworkInformation.PingReply
Public Function Send (address As IPAddress, timeout As TimeSpan, buffer As Byte(), options As PingOptions) As PingReply

参数

address
IPAddress

标识 ICMP 回送消息目标计算机的 IPAddress

timeout
TimeSpan

一个 值,该值指定发送回显消息) 等待 ICMP 回送答复消息后 (的最长时间。

buffer
Byte[]

一个 Byte 数组,它包含要与 ICMP 回送消息一起发送并在 ICMP 回送应答消息中返回的数据。 该数组包含的字节数不能超过 65,500 个字节。

options
PingOptions

一个 PingOptions 对象,用于控制 ICMP 回显消息数据包的碎片和生存时间值。

返回

有关 ICMP 回送答复消息(如果已收到)或失败原因(如果未收到消息)的信息。

例外

addressbuffernull

timeout 表示小于零毫秒或大于 MaxValue 毫秒的时间。

buffer的大小大于 65,500 字节。

正在调用 SendAsync。

发送或接收 ICMP 消息时引发异常。 请参见内部异常,以确切地了解所引发的异常。

已释放此对象。

适用于

Send(IPAddress, Int32, Byte[], PingOptions)

Source:
Ping.cs
Source:
Ping.cs
Source:
Ping.cs

尝试将包含指定数据缓冲区的 Internet 控制消息协议 (ICMP) 回送消息发送到具有指定 IPAddress 的计算机,并接收来自该计算机的相应 ICMP 回送答复消息。 此重载允许您指定操作的超时值,并控制 ICMP 回显消息数据包的碎片和生存时间值。

public:
 System::Net::NetworkInformation::PingReply ^ Send(System::Net::IPAddress ^ address, int timeout, cli::array <System::Byte> ^ buffer, System::Net::NetworkInformation::PingOptions ^ options);
public System.Net.NetworkInformation.PingReply Send (System.Net.IPAddress address, int timeout, byte[] buffer, System.Net.NetworkInformation.PingOptions? options);
public System.Net.NetworkInformation.PingReply Send (System.Net.IPAddress address, int timeout, byte[] buffer, System.Net.NetworkInformation.PingOptions options);
member this.Send : System.Net.IPAddress * int * byte[] * System.Net.NetworkInformation.PingOptions -> System.Net.NetworkInformation.PingReply
Public Function Send (address As IPAddress, timeout As Integer, buffer As Byte(), options As PingOptions) As PingReply

参数

address
IPAddress

标识 ICMP 回送消息目标计算机的 IPAddress

timeout
Int32

一个 Int32 值,指定(发送回送消息后)等待 ICMP 回送答复消息的最大毫秒数。

buffer
Byte[]

一个 Byte 数组,它包含要与 ICMP 回送消息一起发送并在 ICMP 回送应答消息中返回的数据。 该数组包含的字节数不能超过 65,500 个字节。

options
PingOptions

一个 PingOptions 对象,用于控制 ICMP 回显消息数据包的碎片和生存时间值。

返回

一个 PingReply 对象。如果已收到 ICMP 回送应答消息,此对象将提供有关该消息的信息;如果没有收到 ICMP 回送应答消息,此对象将提供失败的原因。 如果数据包的大小超过最大传输单元 (MTU),该方法将返回 PacketTooBig

例外

buffer 的大小超过 65500 字节。

addressbuffernull

timeout 小于零。

SendAsync 的调用正在进行中。

发送或接收 ICMP 消息时引发异常。 请参见内部异常,以确切地了解所引发的异常。

已释放此对象。

仅 Linux 上的 .NET 7 及更高版本:进程为非特权, buffer 不为空。

示例

下面的代码示例演示如何调用此方法。

void ComplexLocalPing()
{
   
   // Ping's the local machine.
   Ping ^ pingSender = gcnew Ping;
   IPAddress^ address = IPAddress::Loopback;
   
   // Create a buffer of 32 bytes of data to be transmitted.
   String^ data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
   array<Byte>^buffer = Encoding::ASCII->GetBytes( data );
   
   // Wait 10 seconds for a reply.
   int timeout = 10000;
   
   // 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 = gcnew PingOptions( 64,true );
   PingReply ^ reply = pingSender->Send( address, 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 );
   }
   else
   {
      Console::WriteLine( reply->Status );
   }
}
public static void ComplexLocalPing ()
{
    // Ping's the local machine.
    Ping pingSender = new Ping ();
    IPAddress address = IPAddress.Loopback;

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

    // Wait 10 seconds for a reply.
    int timeout = 10000;

    // 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);
    PingReply reply = pingSender.Send (address, 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);
    }
    else
    {
        Console.WriteLine (reply.Status);
    }
}

注解

如果在 参数指定的 timeout 时间内未收到 ICMP 回显回复消息,则 ICMP 回显会失败,并将 Status 属性设置为 TimedOut

注意

当为 timeout指定非常小的数字时,即使 timeout 已过毫秒,也可以收到 Ping 回复。

DontFragment如果 属性为 ,true并且总数据包大小超过本地和远程计算机之间的一个路由节点可以传输的最大数据包大小,则 ICMP 回显请求将失败。 发生这种情况时, Status 将 设置为 PacketTooBig

Ttl使用 属性可以指定 ICMP 回显消息在到达目标之前可以转发的最大次数。 如果数据包在转发指定次数后未到达其目标,则会丢弃该数据包,ICMP 回显请求将失败。 发生这种情况时, Status 将 设置为 TtlExpired

适用于

Send(String, Int32, Byte[])

Source:
Ping.cs
Source:
Ping.cs
Source:
Ping.cs

尝试用指定的数据缓冲区将 Internet 控制消息协议 (ICMP) 回显消息发送到指定计算机,然后从该计算机接收对应的 ICMP 回显回复消息。 此重载使您可以为操作指定一个超时值。

public:
 System::Net::NetworkInformation::PingReply ^ Send(System::String ^ hostNameOrAddress, int timeout, cli::array <System::Byte> ^ buffer);
public System.Net.NetworkInformation.PingReply Send (string hostNameOrAddress, int timeout, byte[] buffer);
member this.Send : string * int * byte[] -> System.Net.NetworkInformation.PingReply
Public Function Send (hostNameOrAddress As String, timeout As Integer, buffer As Byte()) As PingReply

参数

hostNameOrAddress
String

一个 String,它标识作为 ICMP 回送消息目标的计算机。 为此参数指定的值可以是主机名,也可以是以字符串形式表示的 IP 地址。

timeout
Int32

一个 Int32 值,指定(发送回送消息后)等待 ICMP 回送答复消息的最大毫秒数。

buffer
Byte[]

一个 Byte 数组,它包含要与 ICMP 回送消息一起发送并在 ICMP 回送应答消息中返回的数据。 该数组包含的字节数不能超过 65,500 个字节。

返回

一个 PingReply 对象,如果收到了 ICMP 回显回复消息,则该对象提供相应消息的相关信息;如果未收到消息,则该对象提供失败原因。

例外

buffer 的大小超过 65500 字节。

hostNameOrAddressnull 或是一个空字符串 ("")。

- 或 -

buffer 上声明的默认值为 null

timeout 小于零。

SendAsync 的调用正在进行中。

发送或接收 ICMP 消息时引发异常。 请参见内部异常,以确切地了解所引发的异常。

已释放此对象。

仅 Linux 上的 .NET 7 及更高版本:进程为非特权, buffer 不为空。

示例

有关演示如何调用 Send 重载的示例,请参阅 Ping 类概述。

注解

如果在 参数中指定的 timeout 时间内未收到 ICMP 回显回复消息,则 ICMP 回显会失败,并将 Status 属性设置为 TimedOut

注意

当为 timeout指定非常小的数字时,即使 timeout 已过毫秒,也可以收到 Ping 回复。

此重载使用数据包碎片和数据包转发的默认设置。 如果总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小,则包含 ICMP 回显消息的数据包可以在传输中分段。 若要防止碎片,请使用采用 参数的方法之Send一,并将 属性设置为 DontFragmenttrueoptionsDontFragmenttrue 并且总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小时,ICMP 回显请求将失败。 发生这种情况时, Status 将 设置为 PacketTooBig

数据包或数据包片段可以由路由节点转发 128 次,然后再被丢弃。 若要更改此设置,请使用 Send 采用 options 参数的重载,并将 属性设置为 Ttl 所需值。 如果数据包在转发指定次数后未到达其目标,则会丢弃该数据包,ICMP 回显请求将失败。 发生这种情况时, Status 将 设置为 TtlExpired

适用于

Send(IPAddress, Int32, Byte[])

Source:
Ping.cs
Source:
Ping.cs
Source:
Ping.cs

尝试将包含指定数据缓冲区的 Internet 控制消息协议 (ICMP) 回送消息发送到具有指定的 IPAddress 的计算机,并接收来自该计算机的相应 ICMP 回送应答消息。 此重载使您可以为操作指定一个超时值。

public:
 System::Net::NetworkInformation::PingReply ^ Send(System::Net::IPAddress ^ address, int timeout, cli::array <System::Byte> ^ buffer);
public System.Net.NetworkInformation.PingReply Send (System.Net.IPAddress address, int timeout, byte[] buffer);
member this.Send : System.Net.IPAddress * int * byte[] -> System.Net.NetworkInformation.PingReply
Public Function Send (address As IPAddress, timeout As Integer, buffer As Byte()) As PingReply

参数

address
IPAddress

标识 ICMP 回送消息目标计算机的 IPAddress

timeout
Int32

一个 Int32 值,指定(发送回送消息后)等待 ICMP 回送答复消息的最大毫秒数。

buffer
Byte[]

一个 Byte 数组,它包含要与 ICMP 回送消息一起发送并在 ICMP 回送应答消息中返回的数据。 该数组包含的字节数不能超过 65,500 个字节。

返回

一个 PingReply 对象。如果已收到 ICMP 回送应答消息,此对象将提供有关该消息的信息;如果没有收到 ICMP 回送应答消息,此对象将提供失败的原因。 如果数据包的大小超过最大传输单元 (MTU),该方法将返回 PacketTooBig

例外

buffer 的大小超过 65500 字节。

addressbuffernull

timeout 小于零。

SendAsync 的调用正在进行中。

发送或接收 ICMP 消息时引发异常。 请参见内部异常,以确切地了解所引发的异常。

已释放此对象。

仅 Linux 上的 .NET 7 及更高版本:进程为非特权, buffer 不为空。

示例

下面的代码示例演示如何调用此方法。

void LocalPingTimeout()
{
   
   // Ping's the local machine.
   Ping ^ pingSender = gcnew Ping;
   IPAddress^ address = IPAddress::Loopback;
   
   // Create a buffer of 32 bytes of data to be transmitted.
   String^ data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
   array<Byte>^buffer = Encoding::ASCII->GetBytes( data );
   
   // Wait 10 seconds for a reply.
   int timeout = 10000;
   PingReply ^ reply = pingSender->Send( address, timeout, buffer);
   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 );
   }
   else
   {
      Console::WriteLine( reply->Status );
   }
}
public static void LocalPingTimeout ()
{
    // Ping's the local machine.
    Ping pingSender = new Ping ();
    IPAddress address = IPAddress.Loopback;

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

    // Wait 10 seconds for a reply.
    int timeout = 10000;
    PingReply reply = pingSender.Send (address, timeout, buffer);

    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);
    }
    else
    {
        Console.WriteLine (reply.Status);
    }
}

注解

如果在 参数中指定的 timeout 时间内未收到 ICMP 回显回复消息,则 ICMP 回显会失败,并将 Status 属性设置为 TimedOut

注意

当为 timeout指定非常小的数字时,即使 timeout 已过毫秒,也可以收到 Ping 回复。

此重载使用数据包碎片和数据包转发的默认设置。 如果总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小,则包含 ICMP 回显消息的数据包可以在传输中分段。 若要防止碎片,请使用采用 参数的方法之Send一,并将 属性设置为 DontFragmenttrueoptionsDontFragmenttrue 并且总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小时,ICMP 回显请求将失败。 发生这种情况时, Status 将 设置为 PacketTooBig

数据包或数据包片段可以由路由节点转发 128 次,然后再被丢弃。 若要更改此设置,请使用 Send 采用 options 参数的重载,并将 属性设置为 Ttl 所需值。 如果数据包在转发指定次数后未到达其目标,则会丢弃该数据包,ICMP 回显请求将失败。 发生这种情况时, Status 将 设置为 TtlExpired

适用于

Send(String, Int32)

Source:
Ping.cs
Source:
Ping.cs
Source:
Ping.cs

尝试向指定的计算机发送 Internet 控制消息协议 (ICMP) 回送消息,并从该计算机接收相应的 ICMP 回送答复消息。 使用此方法可以为操作指定一个超时值。

public:
 System::Net::NetworkInformation::PingReply ^ Send(System::String ^ hostNameOrAddress, int timeout);
public System.Net.NetworkInformation.PingReply Send (string hostNameOrAddress, int timeout);
member this.Send : string * int -> System.Net.NetworkInformation.PingReply
Public Function Send (hostNameOrAddress As String, timeout As Integer) As PingReply

参数

hostNameOrAddress
String

一个 String,它标识作为 ICMP 回送消息目标的计算机。 为此参数指定的值可以是主机名,也可以是以字符串形式表示的 IP 地址。

timeout
Int32

一个 Int32 值,指定(发送回送消息后)等待 ICMP 回送答复消息的最大毫秒数。

返回

一个 PingReply 对象,如果收到了 ICMP 回显回复消息,则该对象提供相应消息的相关信息;如果未收到消息,则该对象提供失败原因。

例外

hostNameOrAddressnull 或是一个空字符串 ("")。

timeout 小于零。

SendAsync 的调用正在进行中。

发送或接收 ICMP 消息时引发异常。 请参见内部异常,以确切地了解所引发的异常。

已释放此对象。

示例

有关演示如何调用 Send 方法的示例,请参阅 Ping 类概述。

注解

如果在 参数中指定的 timeout 时间内未收到 ICMP 回显回复消息,则 ICMP 回显会失败,并将 Status 属性设置为 TimedOut

注意

当为 timeout指定非常小的数字时,即使 timeout 已过毫秒,也可以收到 Ping 回复。

此重载使用数据包碎片和数据包转发的默认设置。 如果总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小,则包含 ICMP 回显消息的数据包可以在传输中分段。 若要防止碎片,请使用采用 参数的方法之Send一,并将 属性设置为 DontFragmenttrueoptionsDontFragmenttrue 并且总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小时,ICMP 回显请求将失败。 发生这种情况时, Status 将 设置为 PacketTooBig。 如果分段) 数据包片段 (路由节点可以在丢弃之前转发 128 次。 若要更改此设置,请使用 Send 采用 options 参数的重载,并将 属性设置为 Ttl 所需值。 如果数据包在被转发到指定次数后未到达其目标,则数据包将被丢弃,ICMP 回送请求将失败。 发生这种情况时, Status 设置为 TtlExpired

适用于

Send(IPAddress, Int32)

Source:
Ping.cs
Source:
Ping.cs
Source:
Ping.cs

尝试将包含指定数据缓冲区的 Internet 控制消息协议 (ICMP) 回送消息发送到具有指定的 IPAddress 的计算机,并接收来自该计算机的相应 ICMP 回送应答消息。 使用此方法可以为操作指定一个超时值。

public:
 System::Net::NetworkInformation::PingReply ^ Send(System::Net::IPAddress ^ address, int timeout);
public System.Net.NetworkInformation.PingReply Send (System.Net.IPAddress address, int timeout);
member this.Send : System.Net.IPAddress * int -> System.Net.NetworkInformation.PingReply
Public Function Send (address As IPAddress, timeout As Integer) As PingReply

参数

address
IPAddress

标识 ICMP 回送消息目标计算机的 IPAddress

timeout
Int32

一个 Int32 值,指定(发送回送消息后)等待 ICMP 回送答复消息的最大毫秒数。

返回

一个 PingReply 对象,如果收到了 ICMP 回显回复消息,则该对象提供相应消息的相关信息;如果未收到消息,则该对象提供失败原因。

例外

addressnull

timeout 小于零。

SendAsync 的调用正在进行中。

发送或接收 ICMP 消息时引发异常。 请参见内部异常,以确切地了解所引发的异常。

已释放此对象。

示例

有关演示如何调用 Send 方法的示例,请参阅 Ping 类概述。

注解

如果在 参数中指定的 timeout 时间内未收到 ICMP 回送回复消息,则 ICMP 回送将失败,并将 Status 属性设置为 TimedOut

注意

当为 timeout指定非常小的数字时,即使 timeout 已过毫秒,也可以接收 Ping 回复。

此重载使用默认设置进行数据包碎片和数据包转发。 如果总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小,则包含 ICMP 回送消息的数据包可以在传输中分段。 若要防止碎片,请使用采用 参数的方法之Send一,并将 属性设置为 DontFragmenttrueoptionsDontFragmenttrue 并且总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小时,ICMP 回送请求将失败。 发生这种情况时, Status 设置为 PacketTooBig

数据包或数据包片段可以由路由节点转发 128 次,然后再被丢弃。 若要更改此设置,请使用 Send 采用 options 参数的重载,并将 属性设置为 Ttl 所需的值。 如果数据包在被转发到指定次数后未到达其目标,则数据包将被丢弃,ICMP 回送请求将失败。 发生这种情况时, Status 设置为 TtlExpired

适用于

Send(String)

Source:
Ping.cs
Source:
Ping.cs
Source:
Ping.cs

尝试向指定的计算机发送 Internet 控制消息协议 (ICMP) 回送消息,并从该计算机接收相应的 ICMP 回送答复消息。

public:
 System::Net::NetworkInformation::PingReply ^ Send(System::String ^ hostNameOrAddress);
public System.Net.NetworkInformation.PingReply Send (string hostNameOrAddress);
member this.Send : string -> System.Net.NetworkInformation.PingReply
Public Function Send (hostNameOrAddress As String) As PingReply

参数

hostNameOrAddress
String

一个 String,它标识作为 ICMP 回送消息目标的计算机。 为此参数指定的值可以是主机名,也可以是以字符串形式表示的 IP 地址。

返回

一个 PingReply 对象。如果已收到 ICMP 回送应答消息,此对象将提供有关该消息的信息;如果没有收到 ICMP 回送应答消息,此对象将提供失败的原因。

例外

hostNameOrAddressnull 或是一个空字符串 ("")。

SendAsync 的调用正在进行中。

发送或接收 ICMP 消息时引发异常。 请参见内部异常,以确切地了解所引发的异常。

已释放此对象。

示例

下面的代码示例演示如何调用此方法。

void SimplePing()
{
   Ping ^ pingSender = gcnew Ping;
   PingReply ^ reply = pingSender->Send( "www.contoso.com" );
   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 );
   }
   else
   {
      Console::WriteLine( reply->Status );
   }
}
public static void SimplePing ()
{
    Ping pingSender = new Ping ();
    PingReply reply = pingSender.Send ("www.contoso.com");

    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);
    }
    else
    {
        Console.WriteLine (reply.Status);
    }
}

注解

此方法发送包含 ICMP 回显消息的 32 Byte 数据缓冲区。 方法等待 ICMP 回送答复消息 5 秒。 如果该时间未收到回复,则 方法返回 , Status 并将 属性设置为 TimedOut

此重载使用默认设置进行数据包碎片和数据包转发。 如果总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小,则包含 ICMP 回送消息的数据包可以在传输中分段。 若要防止碎片,请使用采用 参数的方法之Send一,并将 属性设置为 DontFragmenttrueoptionsDontFragmenttrue 并且总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小时,ICMP 回送请求将失败。 发生这种情况时, Status 设置为 PacketTooBig。 数据包或数据包片段 (如果分段) 可以由路由节点转发 128 次,然后再被丢弃。 若要更改此设置,请使用 Send 采用 options 参数的重载,并将 属性设置为 Ttl 所需的值。 如果数据包在被转发到指定次数后未到达其目标,则数据包将被丢弃,ICMP 回送请求将失败。 发生这种情况时, Status 设置为 TtlExpired

适用于

Send(IPAddress)

Source:
Ping.cs
Source:
Ping.cs
Source:
Ping.cs

尝试将 Internet 控制消息协议 (ICMP) 回送消息发送到具有指定 IPAddress 的计算机,并接收来自该计算机的相应 ICMP 回送答复消息。

public:
 System::Net::NetworkInformation::PingReply ^ Send(System::Net::IPAddress ^ address);
public System.Net.NetworkInformation.PingReply Send (System.Net.IPAddress address);
member this.Send : System.Net.IPAddress -> System.Net.NetworkInformation.PingReply
Public Function Send (address As IPAddress) As PingReply

参数

address
IPAddress

标识 ICMP 回送消息目标计算机的 IPAddress

返回

PingReply 对象。如果收到 ICMP 回送答复消息,此对象提供有关该消息的信息;如果没有收到 ICMP 回送答复消息,此对象将提供失败的原因。

例外

addressnull

SendAsync 的调用正在进行中。

发送或接收 ICMP 消息时引发异常。 请参见内部异常,以确切地了解所引发的异常。

已释放此对象。

示例

下面的代码示例演示如何调用此方法。

void LocalPing()
{
   
   // Ping's the local machine.
   Ping ^ pingSender = gcnew Ping;
   IPAddress^ address = IPAddress::Loopback;
   PingReply ^ reply = pingSender->Send( address );
   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 );
   }
   else
   {
      Console::WriteLine( reply->Status );
   }
}
public static void LocalPing ()
{
    // Ping's the local machine.
    Ping pingSender = new Ping ();
    IPAddress address = IPAddress.Loopback;
    PingReply reply = pingSender.Send (address);

    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);
    }
    else
    {
        Console.WriteLine (reply.Status);
    }
}

注解

此方法使用 ICMP 回送消息将发送到由 address 32 Byte 数据缓冲区指定的主机。 方法等待 ICMP 回送答复消息 5 秒。 如果该时间未收到回复,则 方法返回 , Status 并将 属性设置为 TimedOut

此重载使用默认设置进行数据包碎片和数据包转发。 如果总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小,则包含 ICMP 回送消息的数据包可以在传输中分段。 若要防止碎片,请使用采用 参数的方法之Send一,并将 属性设置为 DontFragmenttrueoptionsDontFragmenttrue 并且总数据包大小超过本地和远程计算机之间的某个路由节点可以传输的最大数据包大小时,ICMP 回送请求将失败。 发生这种情况时, Status 设置为 PacketTooBig。 数据包或数据包片段 (如果分段) 可以由路由节点转发 128 次,然后再被丢弃。 若要更改此设置,请使用 Send 采用 options 参数的重载,并将 属性设置为 Ttl 所需的值。 如果数据包在被转发到指定次数后未到达其目标,则数据包将被丢弃,ICMP 回送请求将失败。 发生这种情况时, Status 设置为 TtlExpired

适用于