Socket.Receive 方法

定义

接收来自绑定的 Socket 的数据。

重载

Receive(Byte[], Int32, Int32, SocketFlags, SocketError)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区。

Receive(Span<Byte>, SocketFlags, SocketError)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区。

Receive(IList<ArraySegment<Byte>>, SocketFlags, SocketError)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区列表中。

Receive(Byte[], Int32, SocketFlags)

使用指定的 Socket,从绑定的 SocketFlags 接收指定字节数的数据,并将数据存入接收缓冲区。

Receive(Span<Byte>, SocketFlags)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区。

Receive(Byte[], Int32, Int32, SocketFlags)

使用指定的 Socket,从绑定的 SocketFlags 接收指定的字节数,存入接收缓冲区的指定偏移量位置。

Receive(Byte[], SocketFlags)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区。

Receive(Span<Byte>)

从绑定的 Socket 套接字接收数据,将数据存入接收缓冲区。

Receive(IList<ArraySegment<Byte>>)

从绑定的 Socket 接收数据,将数据存入接收缓冲区列表中。

Receive(Byte[])

从绑定的 Socket 套接字接收数据,将数据存入接收缓冲区。

Receive(IList<ArraySegment<Byte>>, SocketFlags)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区列表中。

Receive(Byte[], Int32, Int32, SocketFlags, SocketError)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区。

public:
 int Receive(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Receive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Receive : byte[] * int * int * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Receive (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef errorCode As SocketError) As Integer

参数

buffer
Byte[]

Byte 类型的数组,它是存储接收到的数据的位置。

offset
Int32

buffer 参数中的位置,用于存储所接收的数据。

size
Int32

要接收的字节数。

socketFlags
SocketFlags

SocketFlags 值的按位组合。

errorCode
SocketError

一个 SocketError 对象,它存储套接字错误。

返回

收到的字节数。

例外

buffernull

offset 小于 0。

offset 大于 buffer 的长度。

size 小于 0。

- 或 -

size 大于 buffer 的长度减去 offset 参数的值。

调用堆栈中的调用方没有所需的权限。

注解

方法 Receive 将数据读入 buffer 参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive

如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。

如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 如果超过超时值,调用 Receive 将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 尝试访问套接字时出错。 请参阅下面的备注。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。

如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大为 size 参数指定的字节数。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。

如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 bufferbuffer 则会用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

Receive(Span<Byte>, SocketFlags, SocketError)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区。

public:
 int Receive(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Receive (Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Receive : Span<byte> * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Receive (buffer As Span(Of Byte), socketFlags As SocketFlags, ByRef errorCode As SocketError) As Integer

参数

buffer
Span<Byte>

一个字节范围,它是所接收的数据的存储位置。

socketFlags
SocketFlags

枚举值的按位组合,它用于指定发送和接收行为。

errorCode
SocketError

当此方法返回时,将包含定义套接字错误代码的枚举值之一。

返回

收到的字节数。

例外

尝试访问套接字时出错。

调用堆栈中的调用方没有所需的权限。

注解

方法 Receive 将数据读入 buffer 参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive

此重载只需要提供接收缓冲区。 缓冲区偏移量默认为 0,大小默认为缓冲区参数的长度, SocketFlags 值默认为 None

如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。

如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 超过超时值时, Receive 调用将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。

如果使用的是面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。

如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 bufferbuffer 则会用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

Receive(IList<ArraySegment<Byte>>, SocketFlags, SocketError)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区列表中。

public:
 int Receive(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Receive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Receive : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Receive (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags, ByRef errorCode As SocketError) As Integer

参数

buffers
IList<ArraySegment<Byte>>

ArraySegment<T> 类型的一个 Byte 列表,包含接收的数据。

socketFlags
SocketFlags

SocketFlags 值的按位组合。

errorCode
SocketError

一个 SocketError 对象,它存储套接字错误。

返回

收到的字节数。

例外

buffersnull

- 或 -

buffers.Count 是零。

尝试访问套接字时出错。

注解

此方法将数据读取到 参数中 buffers ,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用。

此重载要求提供一个或多个接收缓冲区。 该值 SocketFlags 默认为 None

如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机连接到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许接收来自任何主机的数据。

如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则 方法将阻止数据,直到数据可用。 如果超出超时值,调用将ReceiveSocketException引发 。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可供读取。 如果 Available 为非零,请重试接收操作。

如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。

如果使用无 Socket连接 ,Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 buffersbuffers 则使用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

Receive(Byte[], Int32, SocketFlags)

使用指定的 Socket,从绑定的 SocketFlags 接收指定字节数的数据,并将数据存入接收缓冲区。

public:
 int Receive(cli::array <System::Byte> ^ buffer, int size, System::Net::Sockets::SocketFlags socketFlags);
public int Receive (byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags);
member this.Receive : byte[] * int * System.Net.Sockets.SocketFlags -> int
Public Function Receive (buffer As Byte(), size As Integer, socketFlags As SocketFlags) As Integer

参数

buffer
Byte[]

Byte 类型的数组,它是存储接收到的数据的位置。

size
Int32

要接收的字节数。

socketFlags
SocketFlags

SocketFlags 值的按位组合。

返回

收到的字节数。

例外

buffernull

size 超出了 buffer 的大小。

尝试访问套接字时出错。

调用堆栈中的调用方没有所需的权限。

示例

下面接收在 中找到 buffer的数据,并为 指定 NoneSocketFlags

// Receive the host home page content and loop until all the data is received.
Int32 bytes = s->Receive( RecvBytes, RecvBytes->Length, SocketFlags::None );
strRetPage =  "Default HTML page on ";
strRetPage->Concat( server,  ":\r\n", ASCII->GetString( RecvBytes, 0, bytes ) );
while ( bytes > 0 )
{
   bytes = s->Receive( RecvBytes, RecvBytes->Length, SocketFlags::None );
   strRetPage->Concat( ASCII->GetString( RecvBytes, 0, bytes ) );
}

// Receive the host home page content and loop until all the data is received.
Int32 bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
strRetPage = "Default HTML page on " + server + ":\r\n";
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);

while (bytes > 0)
{
  bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
  strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
}

' Receive the host home page content and loop until all the data is received.

'Dim bytes As Int32 = s.Receive(RecvBytes, RecvBytes.Length, 0)
Dim bytes As Int32 = s.Receive(RecvBytes, RecvBytes.Length, 0)

strRetPage = "Default HTML page on " + server + ":\r\n"
strRetPage = "Default HTML page on " + server + ":" + ControlChars.Lf + ControlChars.NewLine

Dim i As Integer

While bytes > 0

  bytes = s.Receive(RecvBytes, RecvBytes.Length, 0)

  strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes)

End While

注解

方法 Receive 将数据读取到 参数中 buffer ,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive

此重载仅要求提供接收缓冲区、要接收的字节数以及所需的 SocketFlags

如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许接收来自任何主机的数据。

如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则 方法将阻止数据,直到数据可用。 如果超出超时值,调用 Receive 将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可供读取。 如果 Available 为非零,请重试接收操作。

如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最多为 参数指定的 size 字节数。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。

如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 bufferbuffer 则使用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

Receive(Span<Byte>, SocketFlags)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区。

public:
 int Receive(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags);
public int Receive (Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags);
member this.Receive : Span<byte> * System.Net.Sockets.SocketFlags -> int
Public Function Receive (buffer As Span(Of Byte), socketFlags As SocketFlags) As Integer

参数

buffer
Span<Byte>

一个字节范围,它是所接收的数据的存储位置。

socketFlags
SocketFlags

枚举值的按位组合,它用于指定发送和接收行为。

返回

收到的字节数。

例外

尝试访问套接字时出错。

调用堆栈中的调用方没有所需的权限。

注解

方法 Receive 将数据读入缓冲区参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive

此重载仅要求提供接收缓冲区。 缓冲区偏移量默认为 0,大小默认为缓冲区参数的长度, SocketFlags 值默认为 None

如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许接收来自任何主机的数据。

如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则 方法将阻止数据,直到数据可用。 超过超时值时, Receive 调用将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可供读取。 如果 Available 为非零,请重试接收操作。

如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。

如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队数据报。 如果收到的数据报大于 参数的大小 bufferbuffer 则使用消息的第一部分填充,多余的数据将丢失,并 SocketException 引发 。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

Receive(Byte[], Int32, Int32, SocketFlags)

使用指定的 Socket,从绑定的 SocketFlags 接收指定的字节数,存入接收缓冲区的指定偏移量位置。

public:
 int Receive(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags);
public int Receive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags);
member this.Receive : byte[] * int * int * System.Net.Sockets.SocketFlags -> int
Public Function Receive (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags) As Integer

参数

buffer
Byte[]

类型 Byte 的数组,它是所接受的数据的存储位置。

offset
Int32

buffer 中存储所接收数据的位置。

size
Int32

要接收的字节数。

socketFlags
SocketFlags

SocketFlags 值的按位组合。

返回

收到的字节数。

例外

buffernull

offset 小于 0。

offset 大于 buffer 的长度。

size 小于 0。

- 或 -

size 大于 buffer 的长度减去 offset 参数的值。

socketFlags 不是有效的值组合。

- 或 -

未设置 LocalEndPoint 属性。

- 或 -

访问 Socket 时出现操作系统错误。

调用堆栈中的调用方没有所需的权限。

示例

下面的代码示例指定在连接的 Socket上接收数据之前的数据缓冲区、偏移量、大小和套接字标志。

// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and socket flags.
int SendReceiveTest4( Socket^ server )
{
   array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
   array<Byte>^ bytes = gcnew array<Byte>(256);
   try
   {
      
      // Blocks until send returns.
      int byteCount = server->Send( msg, 0, msg->Length, SocketFlags::None );
      Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
      
      // Get reply from the server.
      byteCount = server->Receive( bytes, 0, server->Available,
         SocketFlags::None );
      if ( byteCount > 0 )
      {
         Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine(  "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
      return (e->ErrorCode);
   }
   return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and socket flags.
public static int SendReceiveTest4(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try
    {
        // Blocks until send returns.
        int byteCount = server.Send(msg, 0, msg.Length, SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", byteCount);

        // Get reply from the server.
        byteCount = server.Receive(bytes, 0, bytes.Length, SocketFlags.None);

        if (byteCount > 0)
            Console.WriteLine(Encoding.UTF8.GetString(bytes, 0, byteCount));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer, offset, message size, and socket flags.
Public Shared Function SendReceiveTest4(ByVal server As Socket) As Integer 
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim byteCount As Integer = server.Send(msg, 0, msg.Length, SocketFlags.None)
        Console.WriteLine("Sent {0} bytes.", byteCount)
        
        ' Get reply from the server.
        byteCount = server.Receive(bytes, 0, server.Available, SocketFlags.None)
        
        If byteCount > 0 Then
            Console.WriteLine(Encoding.UTF8.GetString(bytes))
        End If
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest4

注解

方法 Receive 将数据读入 buffer 参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive

如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。

如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 如果超过超时值,调用 Receive 将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 尝试访问套接字时出错。 请参阅下面的备注。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。

如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大为 size 参数指定的字节数。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。

如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 bufferbuffer 则会用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

Receive(Byte[], SocketFlags)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区。

public:
 int Receive(cli::array <System::Byte> ^ buffer, System::Net::Sockets::SocketFlags socketFlags);
public int Receive (byte[] buffer, System.Net.Sockets.SocketFlags socketFlags);
member this.Receive : byte[] * System.Net.Sockets.SocketFlags -> int
Public Function Receive (buffer As Byte(), socketFlags As SocketFlags) As Integer

参数

buffer
Byte[]

Byte 类型的数组,它是存储接收到的数据的位置。

socketFlags
SocketFlags

SocketFlags 值的按位组合。

返回

收到的字节数。

例外

buffernull

尝试访问套接字时出错。

调用堆栈中的调用方没有所需的权限。

示例

下面的代码示例指定一个数据缓冲区,以及 SocketFlags 用于在连接的 Socket上接收数据。

// Displays sending with a connected socket
// using the overload that takes a buffer and socket flags.
int SendReceiveTest2( Socket^ server )
{
   array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
   array<Byte>^ bytes = gcnew array<Byte>(256);
   try
   {
      // Blocks until send returns.
      int byteCount = server->Send( msg, SocketFlags::None );
      Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
      
      // Get reply from the server.
      byteCount = server->Receive( bytes, SocketFlags::None );
      if ( byteCount > 0 )
      {
         Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
      return (e->ErrorCode);
   }
   return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer and socket flags.
public static int SendReceiveTest2(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try
    {
        // Blocks until send returns.
        int byteCount = server.Send(msg, SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", byteCount);

        // Get reply from the server.
        byteCount = server.Receive(bytes, SocketFlags.None);
        if (byteCount > 0)
            Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer and socket flags.
Public Shared Function SendReceiveTest2(ByVal server As Socket) As Integer 
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim byteCount As Integer = server.Send(msg, SocketFlags.None)
        Console.WriteLine("Sent {0} bytes.", byteCount)
        
        ' Get reply from the server.
        byteCount = server.Receive(bytes, SocketFlags.None)
        If byteCount > 0 Then
            Console.WriteLine(Encoding.UTF8.GetString(bytes))
        End If
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest2

注解

方法 Receive 将数据读入 buffer 参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive

此重载只需要提供接收缓冲区和必要的 SocketFlags。 缓冲区偏移量默认为 0,大小默认为字节参数的长度。

如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。

如果没有可用于读取的数据,则 Receive 方法将阻塞,直到数据可用。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。

如果使用面向 Socket连接的 ,则 Receive 方法将读取与缓冲区大小的可用数据量一样多的数据。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。

如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队数据报。 如果收到的数据报大于 参数的大小 bufferbuffer 则会用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

Receive(Span<Byte>)

从绑定的 Socket 套接字接收数据,将数据存入接收缓冲区。

public:
 int Receive(Span<System::Byte> buffer);
public int Receive (Span<byte> buffer);
member this.Receive : Span<byte> -> int
Public Function Receive (buffer As Span(Of Byte)) As Integer

参数

buffer
Span<Byte>

一个字节范围,它是所接收的数据的存储位置。

返回

收到的字节数。

例外

尝试访问套接字时出错。

调用堆栈中的调用方没有所需的权限。

注解

方法 Receive 将数据读入 buffer 参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive

此重载只需要提供接收缓冲区。 缓冲区偏移量默认为 0,大小默认为缓冲区参数的长度, SocketFlags 值默认为 None

如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。

如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 超过超时值时, Receive 调用将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。

如果使用的是面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。

如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 bufferbuffer 则会用消息的第一部分填充,多余数据将丢失,并 SocketException 引发 。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

Receive(IList<ArraySegment<Byte>>)

从绑定的 Socket 接收数据,将数据存入接收缓冲区列表中。

public:
 int Receive(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers);
public int Receive (System.Collections.Generic.IList<ArraySegment<byte>> buffers);
member this.Receive : System.Collections.Generic.IList<ArraySegment<byte>> -> int
Public Function Receive (buffers As IList(Of ArraySegment(Of Byte))) As Integer

参数

buffers
IList<ArraySegment<Byte>>

ArraySegment<T> 类型的一个 Byte 列表,包含接收的数据。

返回

收到的字节数。

例外

buffer 参数为 null

尝试访问套接字时出错。

注解

此方法将数据读入 buffers 参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 。

此重载要求提供一个或多个接收缓冲区。

如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机连接到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许接收来自任何主机的数据。

如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则 方法将阻止数据,直到数据可用。 如果超出超时值,调用 Receive 将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可供读取。 如果 Available 为非零,请重试接收操作。

如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。

如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 buffersbuffers 则使用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

注意 在应用程序中启用网络跟踪时,此成员输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

适用于

Receive(Byte[])

从绑定的 Socket 套接字接收数据,将数据存入接收缓冲区。

public:
 int Receive(cli::array <System::Byte> ^ buffer);
public int Receive (byte[] buffer);
member this.Receive : byte[] -> int
Public Function Receive (buffer As Byte()) As Integer

参数

buffer
Byte[]

Byte 类型的数组,它是存储接收到的数据的位置。

返回

收到的字节数。

例外

buffernull

尝试访问套接字时出错。

调用堆栈中的调用方没有所需的权限。

示例

下面的代码示例接收连接的 Socket上的数据。

// Displays sending with a connected socket
// using the overload that takes a buffer.
int SendReceiveTest1( Socket^ server )
{
   array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
   array<Byte>^ bytes = gcnew array<Byte>(256);
   try
   {
      // Blocks until send returns.
      int byteCount = server->Send( msg );
      Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
      
      // Get reply from the server.
      byteCount = server->Receive( bytes );
      if ( byteCount > 0 )
      {
         Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
      return ( e->ErrorCode );
   }
   return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer.
public static int SendReceiveTest1(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try
    {
        // Blocks until send returns.
        int i = server.Send(msg);
        Console.WriteLine("Sent {0} bytes.", i);

        // Get reply from the server.
        i = server.Receive(bytes);
        Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer.
Public Shared Function SendReceiveTest1(ByVal server As Socket) As Integer 
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim i As Integer = server.Send(msg)
        Console.WriteLine("Sent {0} bytes.", i)
        
        ' Get reply from the server.
        i = server.Receive(bytes)
        Console.WriteLine(Encoding.UTF8.GetString(bytes))
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest1

注解

方法 Receive 将数据读入缓冲区参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive

此重载仅要求提供接收缓冲区。 缓冲区偏移量默认为 0,大小默认为缓冲区参数的长度, SocketFlags 值默认为 None

如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许接收来自任何主机的数据。

如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则 方法将阻止数据,直到数据可用。 如果超出超时值,调用 Receive 将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可供读取。 如果 Available 为非零,请重试接收操作。

如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。

如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 bufferbuffer 则使用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

Receive(IList<ArraySegment<Byte>>, SocketFlags)

使用指定的 Socket,从绑定的 SocketFlags 接收数据,将数据存入接收缓冲区列表中。

public:
 int Receive(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags);
public int Receive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags);
member this.Receive : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags -> int
Public Function Receive (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags) As Integer

参数

buffers
IList<ArraySegment<Byte>>

ArraySegment<T> 类型的一个 Byte 列表,包含接收的数据。

socketFlags
SocketFlags

SocketFlags 值的按位组合。

返回

收到的字节数。

例外

buffersnull

- 或 -

buffers.Count 是零。

尝试访问套接字时出错。

示例

下面的代码示例演示如何在连接的 Socket上接收数据。


// Build the buffers for the receive.
List<ArraySegment<Byte> >^ receiveBuffers = 
    gcnew List<ArraySegment<Byte> >(2);

array<Byte>^ bigBuffer = gcnew array<Byte>(1024);

// Specify the first buffer segment (2 bytes, starting 
// at the 4th element of bigBuffer)
receiveBuffers->Add(ArraySegment<Byte>(bigBuffer, 4, 2));

// Specify the second buffer segment (500 bytes, starting
// at the 20th element of bigBuffer)
receiveBuffers->Add(
    ArraySegment<Byte>(bigBuffer, 20, 500));

tcpSocket->Receive(receiveBuffers);

Console::WriteLine("{0}", 
    asciiEncoding->GetString(bigBuffer));

// Build the buffers for the receive.
List<ArraySegment<byte>> recvBuffers =
                         new List<ArraySegment<byte>>(2);

byte[] bigBuffer = new byte[1024];

// Specify the first buffer segment (2 bytes, starting
// at the 4th element of bigBuffer)
recvBuffers.Add(new ArraySegment<byte>(bigBuffer, 4, 2));

// Specify the second buffer segment (500 bytes, starting
// at the 20th element of bigBuffer)
recvBuffers.Add(new ArraySegment<byte>(bigBuffer, 20, 500));

int bytesReceived = mySocket.Receive(recvBuffers);

Console.WriteLine("{0}", ASCII.GetString(bigBuffer));

注解

此方法将数据读取到 参数中 buffers ,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用。

此重载要求提供一个或多个接收缓冲区。 该值 SocketFlags 默认为 None

如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机连接到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许接收来自任何主机的数据。

如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则 方法将阻止数据,直到数据可用。 如果超出超时值,调用将ReceiveSocketException引发 。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可供读取。 如果 Available 为非零,请重试接收操作。

如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。

如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 buffersbuffers 则使用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于