Socket.Receive Method

Definition

Получает данные из связанного объекта Socket.Receives data from a bound Socket.

Overloads

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

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.Receives data from a bound Socket into a receive buffer, using the specified SocketFlags.

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

Получает указанное число байтов данных из связанного объекта Socket в приемный буфер с указанной позиции смещения, используя заданный объект SocketFlags.Receives the specified number of bytes from a bound Socket into the specified offset position of the receive buffer, using the specified SocketFlags.

Receive(Span<Byte>, SocketFlags, SocketError)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.Receives data from a bound Socket into a receive buffer, using the specified SocketFlags.

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

Получает данные из связанного объекта Socket в список приемных буферов, используя заданный объект SocketFlags.Receives data from a bound Socket into the list of receive buffers, using the specified SocketFlags.

Receive(Byte[], Int32, SocketFlags)

Получает указанное число байтов данных из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.Receives the specified number of bytes of data from a bound Socket into a receive buffer, using the specified SocketFlags.

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

Получает данные из связанного объекта Socket в список приемных буферов, используя заданный объект SocketFlags.Receives data from a bound Socket into the list of receive buffers, using the specified SocketFlags.

Receive(Byte[], SocketFlags)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.Receives data from a bound Socket into a receive buffer, using the specified SocketFlags.

Receive(Span<Byte>)

Возвращает данные из связанного объекта Socket в приемный буфер.Receives data from a bound Socket into a receive buffer.

Receive(IList<ArraySegment<Byte>>)

Получает данные из связанного объекта Socket в список приемных буферов.Receives data from a bound Socket into the list of receive buffers.

Receive(Byte[])

Возвращает данные из связанного объекта Socket в приемный буфер.Receives data from a bound Socket into a receive buffer.

Receive(Span<Byte>, SocketFlags)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.Receives data from a bound Socket into a receive buffer, using the specified SocketFlags.

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

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.Receives data from a bound Socket into a receive buffer, using the specified 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

Parameters

buffer
Byte[]

Массив типа Byte, который является местоположением памяти для полученных данных.An array of type Byte that is the storage location for the received data.

offset
Int32

Позиция в параметре buffer для хранения полученных данных.The position in the buffer parameter to store the received data.

size
Int32

Количество байтов, которые необходимо получить.The number of bytes to receive.

socketFlags
SocketFlags

Побитовое сочетание значений SocketFlags.A bitwise combination of the SocketFlags values.

errorCode
SocketError

Объект SocketError, содержащий ошибку сокета.A SocketError object that stores the socket error.

Returns

Int32

Количество полученных байтов.The number of bytes received.

Exceptions

Параметр buffer равен null.buffer is null.

Значение параметра offset меньше 0.offset is less than 0.

-или--or- Значение offset превышает длину buffer.offset is greater than the length of buffer.

-или--or- Значение параметра size меньше 0.size is less than 0.

-или--or- Значение size превышает значение, полученное, если отнять от длины buffer значение параметра offset.size is greater than the length of buffer minus the value of the offset parameter.

socketFlags — недопустимое сочетание значений.socketFlags is not a valid combination of values.

-или--or- Свойство LocalEndPoint не задано.The LocalEndPoint property is not set.

-или--or- Произошла ошибка операционной системы при доступе к Socket.An operating system error occurs while accessing the Socket.

Socket был закрыт.The Socket has been closed.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.A caller in the call stack does not have the required permissions.

Remarks

Метод Receive считывает данные в параметре buffer и возвращает число успешно считанных байтов.The Receive method reads data into the buffer parameter and returns the number of bytes successfully read. Вы можете вызвать Receive как с сокетами, ориентированными на подключение, так и без подключения.You can call Receive from both connection-oriented and connectionless sockets.

Если используется протокол, ориентированный на соединение, необходимо либо вызвать Connect, чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive.If you are using a connection-oriented protocol, you must either call Connect to establish a remote host connection, or Accept to accept an incoming connection prior to calling Receive. Метод Receive будет считывать только данные, поступающие с удаленного узла, установленного в методе Connect или Accept.The Receive method will only read data that arrives from the remote host established in the Connect or Accept method. Если используется протокол без подключения, можно также использовать метод ReceiveFrom.If you are using a connectionless protocol, you can also use the ReceiveFrom method. ReceiveFrom позволит получить данные, поступающие с любого узла.ReceiveFrom will allow you to receive data arriving from any host.

Если данные недоступны для чтения, метод Receive будет блокироваться до тех пор, пока данные не будут доступны, если не было задано значение времени ожидания с помощью Socket.ReceiveTimeout.If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. Если значение времени ожидания было превышено, вызов Receive выдаст SocketException.If the time-out value was exceeded, the Receive call will throw a SocketException. Если вы используете режим без блокировки и в буфере стека протоколов нет доступных данных, метод Receive будет завершен немедленно и выдаст SocketException.If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the Receive method will complete immediately and throw a SocketException. Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket. См. примечания ниже.See Remarks below. Чтобы определить, доступны ли данные для чтения, можно использовать свойство Available.You can use the Available property to determine if data is available for reading. Если Available не равно нулю, повторите операцию получения.When Available is non-zero, retry the receive operation.

При использовании Socket, ориентированного на соединение, метод Receive будет считывать столько данных, сколько доступно, вплоть до числа байтов, заданного параметром size.If you are using a connection-oriented Socket, the Receive method will read as much data as is available, up to the number of bytes specified by the size parameter. Если удаленный узел завершает подключение Socket с помощью метода Shutdown и получены все доступные данные, метод Receive будет завершен немедленно и возвращать нулевые байты.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

Если используется Socketбез подключения, Receive будет считывать первую датаграмму в очереди с адреса назначения, указанного в методе Connect.If you are using a connectionless Socket, Receive will read the first queued datagram from the destination address you specify in the Connect method. Если полученная датаграмма превышает размер параметра buffer, buffer заполняется первой частью сообщения, лишние данные теряются и создается SocketException.If the datagram you receive is larger than the size of the buffer parameter, buffer gets filled with the first part of the message, the excess data is lost and a SocketException is thrown.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

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

Получает указанное число байтов данных из связанного объекта Socket в приемный буфер с указанной позиции смещения, используя заданный объект SocketFlags.Receives the specified number of bytes from a bound Socket into the specified offset position of the receive buffer, using the specified 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

Parameters

buffer
Byte[]

Массив объекта типа Byte, который является местом хранения полученных данных.An array of type Byte that is the storage location for received data.

offset
Int32

Место в объекте buffer, выделенное для хранения принимаемых данных.The location in buffer to store the received data.

size
Int32

Количество байтов, которые необходимо получить.The number of bytes to receive.

socketFlags
SocketFlags

Побитовое сочетание значений SocketFlags.A bitwise combination of the SocketFlags values.

Returns

Int32

Количество полученных байтов.The number of bytes received.

Exceptions

Параметр buffer равен null.buffer is null.

Значение параметра offset меньше 0.offset is less than 0.

-или--or- Значение offset превышает длину buffer.offset is greater than the length of buffer.

-или--or- Значение параметра size меньше 0.size is less than 0.

-или--or- Значение size превышает значение, полученное, если отнять от длины buffer значение параметра offset.size is greater than the length of buffer minus the value of the offset parameter.

socketFlags — недопустимое сочетание значений.socketFlags is not a valid combination of values.

-или--or- Свойство LocalEndPoint не задано.The LocalEndPoint property was not set.

-или--or- Произошла ошибка операционной системы при доступе к Socket.An operating system error occurs while accessing the Socket.

Socket был закрыт.The Socket has been closed.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.A caller in the call stack does not have the required permissions.

Examples

В следующем примере кода задается буфер данных, смещение, размер и флаг сокета перед получением данных на подключенном Socket.The following code example specifies a data buffer, an offset, a size, and a socket flag before receiving data on a connected 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, 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);
        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

Remarks

Метод Receive считывает данные в параметре buffer и возвращает число успешно считанных байтов.The Receive method reads data into the buffer parameter and returns the number of bytes successfully read. Вы можете вызвать Receive как с сокетами, ориентированными на подключение, так и без подключения.You can call Receive from both connection-oriented and connectionless sockets.

Если используется протокол, ориентированный на соединение, необходимо либо вызвать Connect, чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive.If you are using a connection-oriented protocol, you must either call Connect to establish a remote host connection, or Accept to accept an incoming connection prior to calling Receive. Метод Receive будет считывать только данные, поступающие с удаленного узла, установленного в методе Connect или Accept.The Receive method will only read data that arrives from the remote host established in the Connect or Accept method. Если используется протокол без подключения, можно также использовать метод ReceiveFrom.If you are using a connectionless protocol, you can also use the ReceiveFrom method. ReceiveFrom позволит получить данные, поступающие с любого узла.ReceiveFrom will allow you to receive data arriving from any host.

Если данные недоступны для чтения, метод Receive будет блокироваться до тех пор, пока данные не будут доступны, если не было задано значение времени ожидания с помощью Socket.ReceiveTimeout.If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. Если значение времени ожидания было превышено, вызов Receive выдаст SocketException.If the time-out value was exceeded, the Receive call will throw a SocketException. Если вы используете режим без блокировки и в буфере стека протоколов нет доступных данных, метод Receive будет завершен немедленно и выдаст SocketException.If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the Receive method will complete immediately and throw a SocketException. Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket. См. примечания ниже.See Remarks below. Чтобы определить, доступны ли данные для чтения, можно использовать свойство Available.You can use the Available property to determine if data is available for reading. Если Available не равно нулю, повторите операцию получения.When Available is non-zero, retry the receive operation.

При использовании Socket, ориентированного на соединение, метод Receive будет считывать столько данных, сколько доступно, вплоть до числа байтов, заданного параметром size.If you are using a connection-oriented Socket, the Receive method will read as much data as is available, up to the number of bytes specified by the size parameter. Если удаленный узел завершает подключение Socket с помощью метода Shutdown и получены все доступные данные, метод Receive будет завершен немедленно и возвращать нулевые байты.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

Если используется Socketбез подключения, Receive будет считывать первую датаграмму в очереди с адреса назначения, указанного в методе Connect.If you are using a connectionless Socket, Receive will read the first queued datagram from the destination address you specify in the Connect method. Если полученная датаграмма превышает размер параметра buffer, buffer заполняется первой частью сообщения, лишние данные теряются и создается SocketException.If the datagram you receive is larger than the size of the buffer parameter, buffer gets filled with the first part of the message, the excess data is lost and a SocketException is thrown.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

Receive(Span<Byte>, SocketFlags, SocketError)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.Receives data from a bound Socket into a receive buffer, using the specified 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

Parameters

buffer
Span<Byte>

Диапазон байтов, который является местом хранения для полученных данных.A span of bytes that is the storage location for the received data.

socketFlags
SocketFlags

Побитовое сочетание значений перечисления, которое задает поведение получения и отправки.A bitwise combination of the enumeration values that specifies send and receive behaviors.

errorCode
SocketError

При возврате из этого метода содержит одно из значений перечисления, которое определяет коды ошибок для сокета.When this method returns, contains one of the enumeration values that defines error codes for the socket.

Returns

Int32

Количество полученных байтов.The number of bytes received.

Exceptions

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.A caller in the call stack does not have the required permissions.

Remarks

Метод Receive считывает данные в параметре buffer и возвращает число успешно считанных байтов.The Receive method reads data into the buffer parameter and returns the number of bytes successfully read. Вы можете вызвать Receive как с сокетами, ориентированными на подключение, так и без подключения.You can call Receive from both connection-oriented and connectionless sockets.

Эта перегрузка требует только предоставления буфера приема.This overload only requires you to provide a receive buffer. По умолчанию смещение буфера равно 0, размер по умолчанию равен длине параметра buffer, а SocketFlags значение по умолчанию равно None.The buffer offset defaults to 0, the size defaults to the length of the buffer parameter, and the SocketFlags value defaults to None.

Если используется протокол, ориентированный на соединение, необходимо либо вызвать Connect, чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive.If you're using a connection-oriented protocol, you must either call Connect to establish a remote host connection, or Accept to accept an incoming connection prior to calling Receive. Метод Receive будет считывать только данные, поступающие с удаленного узла, установленного в методе Connect или Accept.The Receive method will only read data that arrives from the remote host established in the Connect or Accept method. Если вы используете протокол без установления соединения, можно также использовать метод ReceiveFrom.If you're using a connectionless protocol, you can also use the ReceiveFrom method. ReceiveFrom позволит получить данные, поступающие с любого узла.ReceiveFrom will allow you to receive data arriving from any host.

Если данные недоступны для чтения, метод Receive будет блокироваться до тех пор, пока данные не будут доступны, если не было задано значение времени ожидания с помощью Socket.ReceiveTimeout.If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. Когда значение времени ожидания превышено, Receive вызов выдаст исключение SocketException.When the time-out value is exceeded, the Receive call will throw a SocketException. Если вы находитесь в режиме без блокировки и в буфере стека протоколов нет данных, то метод Receive будет завершен немедленно и выдаст SocketException.If you're in non-blocking mode, and there's no data available in the protocol stack buffer, the Receive method will complete immediately and throw a SocketException. Чтобы определить, доступны ли данные для чтения, можно использовать свойство Available.You can use the Available property to determine if data is available for reading. Если Available не равно нулю, повторите операцию получения.When Available is non-zero, retry the receive operation.

Если вы используете Socket, ориентированную на соединение, метод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера.If you're using a connection-oriented Socket, the Receive method will read as much data as is available, up to the size of the buffer. Если удаленный узел завершает подключение Socket с помощью метода Shutdown и получены все доступные данные, метод Receive будет завершен немедленно и возвращать нулевые байты.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

Если вы используете Socketбез подключения, Receive будет считывать первую датаграмму в очереди с адреса назначения, указанного в методе Connect.If you're using a connectionless Socket, Receive will read the first queued datagram from the destination address you specify in the Connect method. Если полученная датаграмма превышает размер параметра buffer, buffer заполняется первой частью сообщения, лишние данные теряются и создается SocketException.If the datagram you receive is larger than the size of the buffer parameter, buffer gets filled with the first part of the message, the excess data is lost and a SocketException is thrown.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

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

Important

This API is not CLS-compliant.

CLS-compliant alternative
System.Net.Sockets.Socket.Receive(Byte[], SocketFlags)

Получает данные из связанного объекта Socket в список приемных буферов, используя заданный объект SocketFlags.Receives data from a bound Socket into the list of receive buffers, using the specified 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);
[System.CLSCompliant(false)]
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

Parameters

buffers
IList<ArraySegment<Byte>>

Список объектов ArraySegment<T> типа Byte, содержащих полученные данные.A list of ArraySegment<T>s of type Byte that contains the received data.

socketFlags
SocketFlags

Побитовое сочетание значений SocketFlags.A bitwise combination of the SocketFlags values.

errorCode
SocketError

Объект SocketError, содержащий ошибку сокета.A SocketError object that stores the socket error.

Returns

Int32

Количество полученных байтов.The number of bytes received.

Attributes

Exceptions

Параметр buffers равен null.buffers is null.

-или--or- Значение buffers. Отсчет равен нулю.buffers.Count is zero.

Произошла ошибка при попытке доступа к сокету.An error occurred while attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Remarks

Этот метод считывает данные в параметр buffers и возвращает число успешно считанных байтов.This method reads data into the buffers parameter and returns the number of bytes successfully read. Вы можете вызывать из сокетов, ориентированных на подключение, и без подключения.You can call from both connection-oriented and connectionless sockets.

Эта перегрузка требует предоставления одного или нескольких буферов приема.This overload requires you to provide one or more receive buffers. Значение SocketFlags по умолчанию равно None.The SocketFlags value defaults to None.

Если используется протокол, ориентированный на соединение, необходимо либо вызвать Connect, чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive.If you are using a connection-oriented protocol, you must either call Connect to establish a remote host connection, or Accept to accept an incoming connection prior to calling Receive. Метод Receive будет считывать только данные, поступающие с подключения к удаленному узлу, установленного в методе Connect или Accept.The Receive method will only read data that arrives from the remote host connection established in the Connect or Accept method. Если используется протокол без подключения, можно также использовать метод ReceiveFrom.If you are using a connectionless protocol, you can also use the ReceiveFrom method. ReceiveFrom позволит получить данные, поступающие с любого узла.ReceiveFrom will allow you to receive data arriving from any host.

Если данные недоступны для чтения, метод Receive будет блокироваться до тех пор, пока данные не будут доступны, если не было задано значение времени ожидания с помощью Socket.ReceiveTimeout.If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. Если значение времени ожидания было превышено, Receive вызов создает исключение SocketException.If the time-out value was exceeded, the Receive call throws a SocketException. Если вы используете режим без блокировки и в буфере стека протоколов нет доступных данных, метод Receive будет завершен немедленно и выдаст SocketException.If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the Receive method will complete immediately and throw a SocketException. Чтобы определить, доступны ли данные для чтения, можно использовать свойство Available.You can use the Available property to determine if data is available for reading. Если Available не равно нулю, повторите операцию получения.When Available is non-zero, retry the receive operation.

При использовании Socket, ориентированного на соединение, метод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера.If you are using a connection-oriented Socket, the Receive method will read as much data as is available, up to the size of the buffer. Если удаленный узел завершает подключение Socket с помощью метода Shutdown и получены все доступные данные, метод Receive будет завершен немедленно и возвращать нулевые байты.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

Если используется Socketбез подключения,Receive будет считывать первую датаграмму в очереди с адреса назначения, указанного в методе Connect.If you are using a connectionless Socket,Receive will read the first queued datagram from the destination address you specify in the Connect method. Если полученная датаграмма превышает размер параметра buffers, buffers заполняется первой частью сообщения, лишние данные теряются и создается SocketException.If the datagram you receive is larger than the size of the buffers parameter, buffers gets filled with the first part of the message, the excess data is lost and a SocketException is thrown.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

Receive(Byte[], Int32, SocketFlags)

Получает указанное число байтов данных из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.Receives the specified number of bytes of data from a bound Socket into a receive buffer, using the specified 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

Parameters

buffer
Byte[]

Массив типа Byte, который является местоположением памяти для полученных данных.An array of type Byte that is the storage location for the received data.

size
Int32

Количество байтов, которые необходимо получить.The number of bytes to receive.

socketFlags
SocketFlags

Побитовое сочетание значений SocketFlags.A bitwise combination of the SocketFlags values.

Returns

Int32

Количество полученных байтов.The number of bytes received.

Exceptions

Параметр buffer равен null.buffer is null.

Значение size превышает размер параметра buffer.size exceeds the size of buffer.

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.A caller in the call stack does not have the required permissions.

Examples

Следующий пример получает данные, найденные в buffer, и указывает None для SocketFlags.The following receives the data found into buffer, and specifies None for SocketFlags.

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

Remarks

Метод Receive считывает данные в параметр buffer и возвращает число успешно считанных байтов.The Receive method reads data into the buffer parameter and returns the number of bytes successfully read. Вы можете вызвать Receive как с сокетами, ориентированными на подключение, так и без подключения.You can call Receive from both connection-oriented and connectionless sockets.

Эта перегрузка требует только предоставить буфер приема, число принимаемых байтов и необходимое SocketFlags.This overload only requires you to provide a receive buffer, the number of bytes you want to receive, and the necessary SocketFlags.

Если используется протокол, ориентированный на соединение, необходимо либо вызвать Connect, чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive.If you are using a connection-oriented protocol, you must either call Connect to establish a remote host connection, or Accept to accept an incoming connection prior to calling Receive. Метод Receive будет считывать только данные, поступающие с удаленного узла, установленного в методе Connect или Accept.The Receive method will only read data that arrives from the remote host established in the Connect or Accept method. Если используется протокол без подключения, можно также использовать метод ReceiveFrom.If you are using a connectionless protocol, you can also use the ReceiveFrom method. ReceiveFrom позволит получить данные, поступающие с любого узла.ReceiveFrom will allow you to receive data arriving from any host.

Если данные недоступны для чтения, метод Receive будет блокироваться до тех пор, пока данные не будут доступны, если не было задано значение времени ожидания с помощью Socket.ReceiveTimeout.If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. Если значение времени ожидания было превышено, вызов Receive выдаст SocketException.If the time-out value was exceeded, the Receive call will throw a SocketException. Если вы используете режим без блокировки и в буфере стека протоколов нет доступных данных, метод Receive будет завершен немедленно и выдаст SocketException.If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, The Receive method will complete immediately and throw a SocketException. Чтобы определить, доступны ли данные для чтения, можно использовать свойство Available.You can use the Available property to determine if data is available for reading. Если Available не равен нулю, повторите операцию получения.When Available is non-zero, retry your receive operation.

При использовании Socket, ориентированного на соединение, метод Receive будет считывать столько данных, сколько доступно, вплоть до числа байтов, заданного параметром size.If you are using a connection-oriented Socket, the Receive method will read as much data as is available, up to the number of bytes specified by the size parameter. Если удаленный узел завершает подключение Socket с помощью метода Shutdown и получены все доступные данные, метод Receive будет завершен немедленно и возвращать нулевые байты.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

Если используется Socketбез подключения, Receive будет считывать первую датаграмму в очереди с адреса назначения, указанного в методе Connect.If you are using a connectionless Socket, Receive will read the first queued datagram from the destination address you specify in the Connect method. Если полученная датаграмма превышает размер параметра buffer, buffer заполняется первой частью сообщения, лишние данные теряются и создается SocketException.If the datagram you receive is larger than the size of the buffer parameter, buffer gets filled with the first part of the message, the excess data is lost and a SocketException is thrown.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

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

Important

This API is not CLS-compliant.

CLS-compliant alternative
System.Net.Sockets.Socket.Receive(Byte[], SocketFlags)

Получает данные из связанного объекта Socket в список приемных буферов, используя заданный объект SocketFlags.Receives data from a bound Socket into the list of receive buffers, using the specified 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);
[System.CLSCompliant(false)]
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

Parameters

buffers
IList<ArraySegment<Byte>>

Список объектов ArraySegment<T> типа Byte, содержащих полученные данные.A list of ArraySegment<T>s of type Byte that contains the received data.

socketFlags
SocketFlags

Побитовое сочетание значений SocketFlags.A bitwise combination of the SocketFlags values.

Returns

Int32

Количество полученных байтов.The number of bytes received.

Attributes

Exceptions

Параметр buffers равен null.buffers is null.

-или--or- Значение buffers. Отсчет равен нулю.buffers.Count is zero.

Произошла ошибка при попытке доступа к сокету.An error occurred while attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Examples

В следующем примере кода показано, как получить данные на подключенном Socket.The following code example demonstrates how to receive data on a connected 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));

Remarks

Этот метод считывает данные в параметр buffers и возвращает число успешно считанных байтов.This method reads data into the buffers parameter and returns the number of bytes successfully read. Вы можете вызывать из сокетов, ориентированных на подключение, и без подключения.You can call from both connection-oriented and connectionless sockets.

Эта перегрузка требует предоставления одного или нескольких буферов приема.This overload requires you to provide one or more receive buffers. Значение SocketFlags по умолчанию равно None.The SocketFlags value defaults to None.

Если используется протокол, ориентированный на соединение, необходимо либо вызвать Connect, чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive.If you are using a connection-oriented protocol, you must either call Connect to establish a remote host connection, or Accept to accept an incoming connection prior to calling Receive. Метод Receive будет считывать только данные, поступающие с подключения к удаленному узлу, установленного в методе Connect или Accept.The Receive method will only read data that arrives from the remote host connection established in the Connect or Accept method. Если используется протокол без подключения, можно также использовать метод ReceiveFrom.If you are using a connectionless protocol, you can also use the ReceiveFrom method. ReceiveFrom позволит получить данные, поступающие с любого узла.ReceiveFrom will allow you to receive data arriving from any host.

Если данные недоступны для чтения, метод Receive будет блокироваться до тех пор, пока данные не будут доступны, если не было задано значение времени ожидания с помощью Socket.ReceiveTimeout.If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. Если значение времени ожидания было превышено, Receive вызов создает исключение SocketException.If the time-out value was exceeded, the Receive call throws a SocketException. Если вы используете режим без блокировки и в буфере стека протоколов нет доступных данных, метод Receive будет завершен немедленно и выдаст SocketException.If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the Receive method will complete immediately and throw a SocketException. Чтобы определить, доступны ли данные для чтения, можно использовать свойство Available.You can use the Available property to determine if data is available for reading. Если Available не равно нулю, повторите операцию получения.When Available is non-zero, retry the receive operation.

При использовании Socket, ориентированного на соединение, метод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера.If you are using a connection-oriented Socket, the Receive method will read as much data as is available, up to the size of the buffer. Если удаленный узел завершает подключение Socket с помощью метода Shutdown и получены все доступные данные, метод Receive будет завершен немедленно и возвращать нулевые байты.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

Если используется Socketбез подключения, Receive будет считывать первую из указанных в очереди датаграмму из адреса назначения, указанного в методе Connect.If you are using a connectionless Socket, Receive will read the first enqueued datagram from the destination address you specify in the Connect method. Если полученная датаграмма превышает размер параметра buffers, buffers заполняется первой частью сообщения, лишние данные теряются и создается SocketException.If the datagram you receive is larger than the size of the buffers parameter, buffers gets filled with the first part of the message, the excess data is lost and a SocketException is thrown.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

Receive(Byte[], SocketFlags)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.Receives data from a bound Socket into a receive buffer, using the specified 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

Parameters

buffer
Byte[]

Массив типа Byte, который является местоположением памяти для полученных данных.An array of type Byte that is the storage location for the received data.

socketFlags
SocketFlags

Побитовое сочетание значений SocketFlags.A bitwise combination of the SocketFlags values.

Returns

Int32

Количество полученных байтов.The number of bytes received.

Exceptions

Параметр buffer равен null.buffer is null.

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.A caller in the call stack does not have the required permissions.

Examples

В следующем примере кода задается буфер данных и SocketFlags для получения данных в подключенной Socket.The following code example specifies a data buffer, and SocketFlags for receiving data on a connected 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

Remarks

Метод Receive считывает данные в параметре buffer и возвращает число успешно считанных байтов.The Receive method reads data into the buffer parameter and returns the number of bytes successfully read. Вы можете вызвать Receive как с сокетами, ориентированными на подключение, так и без подключения.You can call Receive from both connection-oriented and connectionless sockets.

Эта перегрузка требует только предоставления буфера получения и необходимых SocketFlags.This overload only requires you to provide a receive buffer and the necessary SocketFlags. По умолчанию смещение буфера равно 0, а размер по умолчанию равен длине параметра Byte.The buffer offset defaults to 0, and the size defaults to the length of the byte parameter.

Если используется протокол, ориентированный на соединение, необходимо либо вызвать Connect, чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive.If you are using a connection-oriented protocol, you must either call Connect to establish a remote host connection, or Accept to accept an incoming connection prior to calling Receive. Метод Receive будет считывать только данные, поступающие с удаленного узла, установленного в методе Connect или Accept.The Receive method will only read data that arrives from the remote host established in the Connect or Accept method. Если используется протокол без подключения, можно также использовать метод ReceiveFrom.If you are using a connectionless protocol, you can also use the ReceiveFrom method. ReceiveFrom позволит получить данные, поступающие с любого узла.ReceiveFrom will allow you to receive data arriving from any host.

Если данные для чтения недоступны, метод Receive будет блокироваться до тех пор, пока данные недоступны.If no data is available for reading, the Receive method will block until data is available. Если вы используете неблокирующий режим и в буфере стека протокола нет доступных данных, метод Receive будет выполнен немедленно и выдаст SocketException.If you are in non-blocking mode, and there is no data available in the protocol stack buffer, the Receive method will complete immediately and throw a SocketException. Чтобы определить, доступны ли данные для чтения, можно использовать свойство Available.You can use the Available property to determine if data is available for reading. Если Available не равен нулю, повторите операцию получения.When Available is non-zero, retry your receive operation.

При использовании Socket, ориентированного на соединение, метод Receive будет считывать столько данных, сколько доступно до размера буфера.If you are using a connection-oriented Socket, the Receive method will read as much data as is available up to the size of the buffer. Если удаленный узел завершает подключение Socket с помощью метода Shutdown и получены все доступные данные, метод Receive будет завершен немедленно и возвращать нулевые байты.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

Если используется Socketбез подключения, Receive будет считывать первую из указанных в очереди датаграмму из адреса назначения, указанного в методе Connect.If you are using a connectionless Socket, Receive will read the first enqueued datagram from the destination address you specify in the Connect method. Если полученная датаграмма превышает размер параметра buffer, buffer заполняется первой частью сообщения, лишние данные теряются и создается SocketException.If the datagram you receive is larger than the size of the buffer parameter, buffer gets filled with the first part of the message, the excess data is lost and a SocketException is thrown.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

Receive(Span<Byte>)

Возвращает данные из связанного объекта Socket в приемный буфер.Receives data from a bound Socket into a receive buffer.

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

Parameters

buffer
Span<Byte>

Диапазон байтов, который является местом хранения для полученных данных.A span of bytes that is the storage location for the received data.

Returns

Int32

Количество полученных байтов.The number of bytes received.

Exceptions

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.A caller in the call stack does not have the required permissions.

Remarks

Метод Receive считывает данные в параметре buffer и возвращает число успешно считанных байтов.The Receive method reads data into the buffer parameter and returns the number of bytes successfully read. Вы можете вызвать Receive как с сокетами, ориентированными на подключение, так и без подключения.You can call Receive from both connection-oriented and connectionless sockets.

Эта перегрузка требует только предоставления буфера приема.This overload only requires you to provide a receive buffer. По умолчанию смещение буфера равно 0, размер по умолчанию равен длине параметра buffer, а SocketFlags значение по умолчанию равно None.The buffer offset defaults to 0, the size defaults to the length of the buffer parameter, and the SocketFlags value defaults to None.

Если используется протокол, ориентированный на подключение, необходимо либо вызвать Connect для установления соединения с удаленным узлом, либо Accept принять входящее подключение перед вызовом Receive.If you're using a connection-oriented protocol, you must either call Connect to establish a remote host connection, or Accept to accept an incoming connection before calling Receive. Метод Receive будет считывать только данные, поступающие с удаленного узла, установленного в методе Connect или Accept.The Receive method will only read data that arrives from the remote host established in the Connect or Accept method. Если вы используете протокол без установления соединения, можно также использовать метод ReceiveFrom.If you're using a connectionless protocol, you can also use the ReceiveFrom method. ReceiveFrom позволит получить данные, поступающие с любого узла.ReceiveFrom will allow you to receive data arriving from any host.

Если данные недоступны для чтения, метод Receive будет блокироваться до тех пор, пока данные не будут доступны, если не было задано значение времени ожидания с помощью Socket.ReceiveTimeout.If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. Когда значение времени ожидания превышено, Receive вызов выдаст исключение SocketException.When the time-out value is exceeded, the Receive call will throw a SocketException. Если вы находитесь в режиме без блокировки и в буфере стека протоколов нет данных, то метод Receive будет завершен немедленно и выдаст SocketException.If you're in non-blocking mode, and there's no data available in the protocol stack buffer, the Receive method will complete immediately and throw a SocketException. Чтобы определить, доступны ли данные для чтения, можно использовать свойство Available.You can use the Available property to determine if data is available for reading. Если Available не равно нулю, повторите операцию получения.When Available is non-zero, retry the receive operation.

Если вы используете Socket, ориентированную на соединение, метод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера.If you're using a connection-oriented Socket, the Receive method will read as much data as is available, up to the size of the buffer. Если удаленный узел завершает подключение Socket с помощью метода Shutdown и получены все доступные данные, метод Receive будет завершен немедленно и возвращать нулевые байты.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

Если вы используете Socketбез подключения, Receive будет считывать первую датаграмму в очереди с адреса назначения, указанного в методе Connect.If you're using a connectionless Socket, Receive will read the first queued datagram from the destination address you specify in the Connect method. Если полученная датаграмма превышает размер параметра buffer, buffer заполняется первой частью сообщения, лишние данные теряются и создается исключение SocketException.If the datagram you receive is larger than the size of the buffer parameter, buffer gets filled with the first part of the message, the excess data is lost, and a SocketException is thrown.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

Receive(IList<ArraySegment<Byte>>)

Получает данные из связанного объекта Socket в список приемных буферов.Receives data from a bound Socket into the list of receive buffers.

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

Parameters

buffers
IList<ArraySegment<Byte>>

Список объектов ArraySegment<T> типа Byte, содержащих полученные данные.A list of ArraySegment<T>s of type Byte that contains the received data.

Returns

Int32

Количество полученных байтов.The number of bytes received.

Exceptions

Параметр buffer содержит значение null.The buffer parameter is null.

Произошла ошибка при попытке доступа к сокету.An error occurred while attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Remarks

Этот метод считывает данные в параметр Buffers и возвращает число успешно считанных байтов.This method reads data into the buffers parameter and returns the number of bytes successfully read. Вы можете вызывать из сокетов, ориентированных на подключение, и без подключения.You can call from both connection-oriented and connectionless sockets.

Эта перегрузка требует предоставления одного или нескольких буферов приема.This overload requires you to provide one or more receive buffers.

Если используется протокол, ориентированный на соединение, необходимо либо вызвать Connect, чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive.If you are using a connection-oriented protocol, you must either call Connect to establish a remote host connection, or Accept to accept an incoming connection prior to calling Receive. Метод Receive будет считывать только данные, поступающие с подключения к удаленному узлу, установленного в методе Connect или Accept.The Receive method will only read data that arrives from the remote host connection established in the Connect or Accept method. Если используется протокол без подключения, можно также использовать метод ReceiveFrom.If you are using a connectionless protocol, you can also use the ReceiveFrom method. ReceiveFrom позволит получить данные, поступающие с любого узла.ReceiveFrom will allow you to receive data arriving from any host.

Если данные недоступны для чтения, метод Receive будет блокироваться до тех пор, пока данные не будут доступны, если не было задано значение времени ожидания с помощью Socket.ReceiveTimeout.If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. Если значение времени ожидания было превышено, вызов Receive выдаст SocketException.If the time-out value was exceeded, the Receive call will throw a SocketException. Если вы используете режим без блокировки и в буфере стека протоколов нет доступных данных, метод Receive будет завершен немедленно и выдаст SocketException.If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the Receive method will complete immediately and throw a SocketException. Чтобы определить, доступны ли данные для чтения, можно использовать свойство Available.You can use the Available property to determine if data is available for reading. Если Available не равно нулю, повторите операцию получения.When Available is non-zero, retry the receive operation.

При использовании Socket, ориентированного на соединение, метод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера.If you are using a connection-oriented Socket, the Receive method will read as much data as is available, up to the size of the buffer. Если удаленный узел завершает подключение Socket с помощью метода Shutdown и получены все доступные данные, метод Receive будет завершен немедленно и возвращать нулевые байты.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

Если используется Socketбез подключения, Receive будет считывать первую из указанных в очереди датаграмму из адреса назначения, указанного в методе Connect.If you are using a connectionless Socket, Receive will read the first enqueued datagram from the destination address you specify in the Connect method. Если полученная датаграмма превышает размер параметра buffers, buffers заполняется первой частью сообщения, лишние данные теряются и создается SocketException.If the datagram you receive is larger than the size of the buffers parameter, buffers gets filled with the first part of the message, the excess data is lost and a SocketException is thrown.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Примечание . Этот элемент выводит данные трассировки при включении трассировки сети в приложении.Note This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

Receive(Byte[])

Возвращает данные из связанного объекта Socket в приемный буфер.Receives data from a bound Socket into a receive buffer.

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

Parameters

buffer
Byte[]

Массив типа Byte, который является местоположением памяти для полученных данных.An array of type Byte that is the storage location for the received data.

Returns

Int32

Количество полученных байтов.The number of bytes received.

Exceptions

Параметр buffer равен null.buffer is null.

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.A caller in the call stack does not have the required permissions.

Examples

Следующий пример кода получает данные на подключенном Socket.The following code example receives data on a connected 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

Remarks

Метод Receive считывает данные в параметре buffer и возвращает число успешно считанных байтов.The Receive method reads data into the buffer parameter and returns the number of bytes successfully read. Вы можете вызвать Receive как с сокетами, ориентированными на подключение, так и без подключения.You can call Receive from both connection-oriented and connectionless sockets.

Эта перегрузка требует только предоставления буфера приема.This overload only requires you to provide a receive buffer. По умолчанию смещение буфера равно 0, размер по умолчанию равен длине параметра buffer, а SocketFlags значение по умолчанию равно None.The buffer offset defaults to 0, the size defaults to the length of the buffer parameter, and the SocketFlags value defaults to None.

Если используется протокол, ориентированный на соединение, необходимо либо вызвать Connect, чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive.If you are using a connection-oriented protocol, you must either call Connect to establish a remote host connection, or Accept to accept an incoming connection prior to calling Receive. Метод Receive будет считывать только данные, поступающие с удаленного узла, установленного в методе Connect или Accept.The Receive method will only read data that arrives from the remote host established in the Connect or Accept method. Если используется протокол без подключения, можно также использовать метод ReceiveFrom.If you are using a connectionless protocol, you can also use the ReceiveFrom method. ReceiveFrom позволит получить данные, поступающие с любого узла.ReceiveFrom will allow you to receive data arriving from any host.

Если данные недоступны для чтения, метод Receive будет блокироваться до тех пор, пока данные не будут доступны, если не было задано значение времени ожидания с помощью Socket.ReceiveTimeout.If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. Если значение времени ожидания было превышено, вызов Receive выдаст SocketException.If the time-out value was exceeded, the Receive call will throw a SocketException. Если вы используете режим без блокировки и в буфере стека протоколов нет доступных данных, метод Receive будет завершен немедленно и выдаст SocketException.If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the Receive method will complete immediately and throw a SocketException. Чтобы определить, доступны ли данные для чтения, можно использовать свойство Available.You can use the Available property to determine if data is available for reading. Если Available не равно нулю, повторите операцию получения.When Available is non-zero, retry the receive operation.

При использовании Socket, ориентированного на соединение, метод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера.If you are using a connection-oriented Socket, the Receive method will read as much data as is available, up to the size of the buffer. Если удаленный узел завершает подключение Socket с помощью метода Shutdown и получены все доступные данные, метод Receive будет завершен немедленно и возвращать нулевые байты.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

Если используется Socketбез подключения, Receive будет считывать первую датаграмму в очереди с адреса назначения, указанного в методе Connect.If you are using a connectionless Socket, Receive will read the first queued datagram from the destination address you specify in the Connect method. Если полученная датаграмма превышает размер параметра buffer, buffer заполняется первой частью сообщения, лишние данные теряются и создается SocketException.If the datagram you receive is larger than the size of the buffer parameter, buffer gets filled with the first part of the message, the excess data is lost and a SocketException is thrown.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

Receive(Span<Byte>, SocketFlags)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.Receives data from a bound Socket into a receive buffer, using the specified 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

Parameters

buffer
Span<Byte>

Диапазон байтов, который является местом хранения для полученных данных.A span of bytes that is the storage location for the received data.

socketFlags
SocketFlags

Побитовое сочетание значений перечисления, которое задает поведение получения и отправки.A bitwise combination of the enumeration values that specifies send and receive behaviors.

Returns

Int32

Количество полученных байтов.The number of bytes received.

Exceptions

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.A caller in the call stack does not have the required permissions.

Remarks

Метод Receive считывает данные в параметре buffer и возвращает число успешно считанных байтов.The Receive method reads data into the buffer parameter and returns the number of bytes successfully read. Вы можете вызвать Receive как с сокетами, ориентированными на подключение, так и без подключения.You can call Receive from both connection-oriented and connectionless sockets.

Эта перегрузка требует только предоставления буфера приема.This overload only requires you to provide a receive buffer. По умолчанию смещение буфера равно 0, размер по умолчанию равен длине параметра buffer, а SocketFlags значение по умолчанию равно None.The buffer offset defaults to 0, the size defaults to the length of the buffer parameter, and the SocketFlags value defaults to None.

Если используется протокол, ориентированный на соединение, необходимо либо вызвать Connect, чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive.If you're using a connection-oriented protocol, you must either call Connect to establish a remote host connection, or Accept to accept an incoming connection prior to calling Receive. Метод Receive будет считывать только данные, поступающие с удаленного узла, установленного в методе Connect или Accept.The Receive method will only read data that arrives from the remote host established in the Connect or Accept method. Если вы используете протокол без установления соединения, можно также использовать метод ReceiveFrom.If you're using a connectionless protocol, you can also use the ReceiveFrom method. ReceiveFrom позволит получить данные, поступающие с любого узла.ReceiveFrom will allow you to receive data arriving from any host.

Если данные недоступны для чтения, метод Receive будет блокироваться до тех пор, пока данные не будут доступны, если не было задано значение времени ожидания с помощью Socket.ReceiveTimeout.If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. Когда значение времени ожидания превышено, Receive вызов выдаст исключение SocketException.When the time-out value is exceeded, the Receive call will throw a SocketException. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов нет доступных данных, метод Receive будет выполнен немедленно и выдаст SocketException.If you're in non-blocking mode, and there is no data available in the protocol stack buffer, the Receive method will complete immediately and throw a SocketException. Чтобы определить, доступны ли данные для чтения, можно использовать свойство Available.You can use the Available property to determine if data is available for reading. Если Available не равно нулю, повторите операцию получения.When Available is non-zero, retry the receive operation.

Если вы используете Socket, ориентированную на соединение, метод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера.If you're using a connection-oriented Socket, the Receive method will read as much data as is available, up to the size of the buffer. Если удаленный узел завершает подключение Socket с помощью метода Shutdown и получены все доступные данные, метод Receive будет завершен немедленно и возвращать нулевые байты.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes.

Если вы используете Socketбез подключения, Receive будет считывать первую датаграмму в очереди с адреса назначения, указанного в методе Connect.If you're using a connectionless Socket, Receive will read the first queued datagram from the destination address you specify in the Connect method. Если полученная датаграмма превышает размер параметра buffer, buffer заполняется первой частью сообщения, лишние данные теряются и создается исключение SocketException.If the datagram you receive is larger than the size of the buffer parameter, buffer gets filled with the first part of the message, the excess data is lost, and a SocketException is thrown.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

See also

Applies to