Socket.BeginReceive Метод

Определение

Начинает выполнение асинхронного приема данных с подключенного объекта Socket.

Перегрузки

BeginReceive(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)

Начинает выполнение асинхронного приема данных с подключенного объекта Socket.

BeginReceive(Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object)

Начинает выполнение асинхронного приема данных с подключенного объекта Socket.

BeginReceive(IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object)

Начинает выполнение асинхронного приема данных с подключенного объекта Socket.

BeginReceive(IList<ArraySegment<Byte>>, SocketFlags, SocketError, AsyncCallback, Object)

Начинает выполнение асинхронного приема данных с подключенного объекта Socket.

BeginReceive(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)

Начинает выполнение асинхронного приема данных с подключенного объекта Socket.

public:
 IAsyncResult ^ BeginReceive(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, AsyncCallback ^ callback, System::Object ^ state);
public:
 IAsyncResult ^ BeginReceive(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socket_flags, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginReceive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, AsyncCallback callback, object state);
public IAsyncResult BeginReceive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socket_flags, AsyncCallback callback, object state);
member this.BeginReceive : byte[] * int * int * System.Net.Sockets.SocketFlags * AsyncCallback * obj -> IAsyncResult
member this.BeginReceive : byte[] * int * int * System.Net.Sockets.SocketFlags * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceive (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, callback As AsyncCallback, state As Object) As IAsyncResult
Public Function BeginReceive (buffer As Byte(), offset As Integer, size As Integer, socket_flags As SocketFlags, callback As AsyncCallback, state As Object) As IAsyncResult

Параметры

buffer
Byte[]

Массив типа Byte, который является местоположением памяти для полученных данных.

offset
Int32

Отсчитываемая с нуля позиция в параметре buffer, начиная с которой хранятся принятые данные.

size
Int32

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

socketFlagssocket_flags
SocketFlags

Поразрядное сочетание значений SocketFlags.

callback
AsyncCallback

Делегат AsyncCallback, ссылающийся на метод, вызываемый по завершении данной операции.

state
Object

Пользовательский объект, содержащий информацию об операции приема. Этот объект передается делегату EndReceive(IAsyncResult) по завершении операции.

Возвращаемое значение

IAsyncResult

Объект IAsyncResult, который ссылается на асинхронное чтение.

Исключения

buffer имеет значение null.

только платформа .NET Framework и .NET 5 и более ранних версий: при попытке доступа к сокету произошла ошибка.

Объект Socket закрыт.

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

-или-

Значение offset превышает длину buffer.

-или-

Значение параметраsize меньше 0.

-или-

Значение size превышает значение, полученное, если отнять от длины buffer значение параметра offset.

Примеры

В следующем примере кода начинается асинхронное получение данных из подключенного Socket.

public ref class StateObject
{
public:
   literal int BUFFER_SIZE = 1024;
   Socket^ workSocket;
   array<Byte>^ buffer;
   StringBuilder^ sb;
   StateObject() : workSocket( nullptr )
   {
      buffer = gcnew array<Byte>(BUFFER_SIZE);
      sb = gcnew StringBuilder;
   }
};
public class StateObject{
     public Socket workSocket = null;
     public const int BUFFER_SIZE = 1024;
     public byte[] buffer = new byte[BUFFER_SIZE];
     public StringBuilder sb = new StringBuilder();
}
Public Class StateObject
   Public workSocket As Socket = Nothing
   Public const BUFFER_SIZE As Integer = 1024
   Public buffer(BUFFER_SIZE) As byte
   Public sb As New StringBuilder()
End Class
static void Listen_Callback( IAsyncResult^ ar )
{
   allDone->Set();
   Socket^ s = safe_cast<Socket^>(ar->AsyncState);
   Socket^ s2 = s->EndAccept( ar );
   StateObject^ so2 = gcnew StateObject;
   so2->workSocket = s2;
   s2->BeginReceive( so2->buffer, 0, StateObject::BUFFER_SIZE, SocketFlags::None,
      gcnew AsyncCallback( &Async_Send_Receive::Read_Callback ), so2 );
}
public static void Listen_Callback(IAsyncResult ar){
     allDone.Set();
     Socket s = (Socket) ar.AsyncState;
     Socket s2 = s.EndAccept(ar);
     StateObject so2 = new StateObject();
     so2.workSocket = s2;
     s2.BeginReceive(so2.buffer, 0, StateObject.BUFFER_SIZE,0,
                           new AsyncCallback(Async_Send_Receive.Read_Callback), so2);	
}
Public Shared Sub Listen_Callback(ar As IAsyncResult)
   allDone.Set()
   Dim s As Socket = CType(ar.AsyncState, Socket)
   Dim s2 As Socket = s.EndAccept(ar)
   Dim so2 As New StateObject()
   so2.workSocket = s2
   s2.BeginReceive(so2.buffer, 0, StateObject.BUFFER_SIZE, 0, New AsyncCallback(AddressOf Async_Send_Receive.Read_Callback), so2)
End Sub
static void Read_Callback( IAsyncResult^ ar )
{
   StateObject^ so = safe_cast<StateObject^>(ar->AsyncState);
   Socket^ s = so->workSocket;

   int read = s->EndReceive( ar );

   if ( read > 0 )
   {
      so->sb->Append( Encoding::ASCII->GetString( so->buffer, 0, read ) );
      s->BeginReceive( so->buffer, 0, StateObject::BUFFER_SIZE, SocketFlags::None,
         gcnew AsyncCallback( &Async_Send_Receive::Read_Callback ), so );
   }
   else
   {
      if ( so->sb->Length > 1 )
      {
         //All of the data has been read, so displays it to the console
         String^ strContent = so->sb->ToString();
         Console::WriteLine( String::Format( "Read {0} byte from socket" +
            " data = {1} ", strContent->Length, strContent ) );
      }
      s->Close();
   }
}
public static void Read_Callback(IAsyncResult ar){
    StateObject so = (StateObject) ar.AsyncState;
    Socket s = so.workSocket;

    int read = s.EndReceive(ar);

    if (read > 0) {
            so.sb.Append(Encoding.ASCII.GetString(so.buffer, 0, read));
            s.BeginReceive(so.buffer, 0, StateObject.BUFFER_SIZE, 0,
                                     new AsyncCallback(Async_Send_Receive.Read_Callback), so);
    }
    else{
         if (so.sb.Length > 1) {
              //All of the data has been read, so displays it to the console
              string strContent;
              strContent = so.sb.ToString();
              Console.WriteLine(String.Format("Read {0} byte from socket" +
                               "data = {1} ", strContent.Length, strContent));
         }
         s.Close();
    }
}
Public Shared Sub Read_Callback(ar As IAsyncResult)
   Dim so As StateObject = CType(ar.AsyncState, StateObject)
   Dim s As Socket = so.workSocket
   
   Dim read As Integer = s.EndReceive(ar)
   
   If read > 0 Then
      so.sb.Append(Encoding.ASCII.GetString(so.buffer, 0, read))
      s.BeginReceive(so.buffer, 0, StateObject.BUFFER_SIZE, 0, New AsyncCallback(AddressOf Async_Send_Receive.Read_Callback), so)
   Else
      If so.sb.Length > 1 Then
         'All the data has been read, so displays it to the console
         Dim strContent As String
         strContent = so.sb.ToString()
         Console.WriteLine([String].Format("Read {0} byte from socket" + "data = {1} ", strContent.Length, strContent))
      End If
      s.Close()
   End If
End Sub

Комментарии

Асинхронная BeginReceive операция должна быть завершена EndReceive путем вызова метода. Как правило, метод вызывается делегатом callback .

Этот метод не блокируется до завершения операции. Чтобы заблокировать работу до завершения операции, используйте одну из Receive перегрузок метода.

Чтобы отменить ожидающий BeginReceive, вызовите Close метод.

Подробные сведения об использовании асинхронной модели программирования см. в разделе "Асинхронные вызовы синхронных методов".

Примечание

При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows sockets версии 2, чтобы получить подробное описание ошибки.

Примечание

Все операции ввода-вывода, инициированные заданным потоком, отменяются при выходе из этого потока. Ожидающая асинхронная операция может завершиться ошибкой, если поток завершает работу до завершения операции.

Примечание

state — это экземпляр определяемого пользователем класса.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в разделе "Трассировка сети" в платформа .NET Framework.

Примечание

Контекст выполнения (контекст безопасности, олицетворенный пользователь и вызывающий контекст) кэшируется для асинхронных Socket методов. После первого использования определенного контекста (конкретный асинхронный Socket метод, конкретный Socket экземпляр и конкретный обратный вызов) последующие использования этого контекста увидят улучшение производительности.

См. также раздел

Применяется к

BeginReceive(Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object)

Начинает выполнение асинхронного приема данных с подключенного объекта Socket.

public:
 IAsyncResult ^ BeginReceive(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode, AsyncCallback ^ callback, System::Object ^ state);
public:
 IAsyncResult ^ BeginReceive(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags flags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % error, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult? BeginReceive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode, AsyncCallback callback, object state);
public IAsyncResult BeginReceive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags flags, out System.Net.Sockets.SocketError error, AsyncCallback callback, object state);
member this.BeginReceive : byte[] * int * int * System.Net.Sockets.SocketFlags * SocketError * AsyncCallback * obj -> IAsyncResult
member this.BeginReceive : byte[] * int * int * System.Net.Sockets.SocketFlags * SocketError * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceive (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef errorCode As SocketError, callback As AsyncCallback, state As Object) As IAsyncResult
Public Function BeginReceive (buffer As Byte(), offset As Integer, size As Integer, flags As SocketFlags, ByRef error As SocketError, callback As AsyncCallback, state As Object) As IAsyncResult

Параметры

buffer
Byte[]

Массив типа Byte, который является местоположением памяти для полученных данных.

offset
Int32

Место в объекте buffer, выделенное для хранения принимаемых данных.

size
Int32

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

socketFlagsflags
SocketFlags

Поразрядное сочетание значений SocketFlags.

errorCodeerror
SocketError

Объект SocketError, содержащий ошибку сокета.

callback
AsyncCallback

Делегат AsyncCallback, ссылающийся на метод, вызываемый по завершении данной операции.

state
Object

Пользовательский объект, содержащий информацию об операции приема. Этот объект передается делегату EndReceive(IAsyncResult) по завершении операции.

Возвращаемое значение

IAsyncResult

Объект IAsyncResult, который ссылается на асинхронное чтение.

Исключения

buffer имеет значение null.

только платформа .NET Framework и .NET 5 и более ранних версий: при попытке доступа к сокету произошла ошибка.

Объект Socket закрыт.

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

-или-

Значение offset превышает длину buffer.

-или-

Значение параметраsize меньше 0.

-или-

Значение size превышает значение, полученное, если отнять от длины buffer значение параметра offset.

Комментарии

Асинхронная BeginReceive операция должна быть завершена EndReceive путем вызова метода. Как правило, метод вызывается делегатом callback .

Этот метод не блокируется до завершения операции. Чтобы заблокировать работу до завершения операции, используйте одну из Receive перегрузок метода.

Чтобы отменить ожидающий BeginReceive, вызовите Close метод.

Подробные сведения об использовании асинхронной модели программирования см. в разделе "Асинхронные вызовы синхронных методов".

Примечание

При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows sockets версии 2, чтобы получить подробное описание ошибки.

Примечание

Все операции ввода-вывода, инициированные заданным потоком, отменяются при выходе из этого потока. Ожидающая асинхронная операция может завершиться ошибкой, если поток завершает работу до завершения операции.

Примечание

state — это экземпляр определяемого пользователем класса.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в разделе "Трассировка сети" в платформа .NET Framework.

Примечание

Контекст выполнения (контекст безопасности, олицетворенный пользователь и вызывающий контекст) кэшируется для асинхронных Socket методов. После первого использования определенного контекста (конкретный асинхронный Socket метод, конкретный Socket экземпляр и конкретный обратный вызов) последующие использования этого контекста увидят улучшение производительности.

См. также раздел

Применяется к

BeginReceive(IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object)

Важно!

Этот API несовместим с CLS.

Начинает выполнение асинхронного приема данных с подключенного объекта Socket.

public:
 IAsyncResult ^ BeginReceive(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginReceive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, AsyncCallback callback, object state);
[System.CLSCompliant(false)]
public IAsyncResult BeginReceive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, AsyncCallback callback, object state);
member this.BeginReceive : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * AsyncCallback * obj -> IAsyncResult
[<System.CLSCompliant(false)>]
member this.BeginReceive : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceive (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags, callback As AsyncCallback, state As Object) As IAsyncResult

Параметры

buffers
IList<ArraySegment<Byte>>

Массив типа Byte, который является местоположением памяти для полученных данных.

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

callback
AsyncCallback

Делегат AsyncCallback, ссылающийся на метод, вызываемый по завершении данной операции.

state
Object

Пользовательский объект, содержащий информацию об операции приема. Этот объект передается делегату EndReceive(IAsyncResult) по завершении операции.

Возвращаемое значение

IAsyncResult

Объект IAsyncResult, который ссылается на асинхронное чтение.

Атрибуты

Исключения

buffer имеет значение null.

только платформа .NET Framework и .NET 5 и более ранних версий: при попытке доступа к сокету произошла ошибка.

Объект Socket закрыт.

Комментарии

Асинхронная BeginReceive операция должна быть завершена путем вызова EndReceive метода. Как правило, метод вызывается делегатом callback .

Этот метод не блокируется до завершения операции. Чтобы заблокировать выполнение операции, используйте одну из Receive перегрузок метода.

Чтобы отменить ожидание BeginReceive, вызовите Close метод.

Подробные сведения об использовании модели асинхронного программирования см. в разделе "Вызов синхронных методов асинхронно".

Примечание

При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows Sockets версии 2, чтобы получить подробное описание ошибки.

Примечание

Все операции ввода-вывода, инициированные заданным потоком, отменяются при выходе из этого потока. Ожидающая асинхронная операция может завершиться ошибкой, если поток завершает работу до завершения операции.

Примечание

state — это экземпляр определяемого пользователем класса.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в разделе "Трассировка сети" в платформа .NET Framework.

Примечание

Контекст выполнения (контекст безопасности, олицетворенный пользователь и вызывающий контекст) кэшируется для асинхронных Socket методов. После первого использования определенного контекста (конкретный асинхронный Socket метод, конкретный Socket экземпляр и конкретный обратный вызов) последующие использования этого контекста увидят улучшение производительности.

См. также раздел

Применяется к

BeginReceive(IList<ArraySegment<Byte>>, SocketFlags, SocketError, AsyncCallback, Object)

Важно!

Этот API несовместим с CLS.

Начинает выполнение асинхронного приема данных с подключенного объекта Socket.

public:
 IAsyncResult ^ BeginReceive(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult? BeginReceive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode, AsyncCallback callback, object state);
[System.CLSCompliant(false)]
public IAsyncResult BeginReceive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode, AsyncCallback callback, object state);
member this.BeginReceive : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * SocketError * AsyncCallback * obj -> IAsyncResult
[<System.CLSCompliant(false)>]
member this.BeginReceive : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * SocketError * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceive (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags, ByRef errorCode As SocketError, callback As AsyncCallback, state As Object) As IAsyncResult

Параметры

buffers
IList<ArraySegment<Byte>>

Массив типа Byte, который является местоположением памяти для полученных данных.

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

errorCode
SocketError

Объект SocketError, содержащий ошибку сокета.

callback
AsyncCallback

Делегат AsyncCallback, ссылающийся на метод, вызываемый по завершении данной операции.

state
Object

Пользовательский объект, содержащий информацию об операции приема. Этот объект передается делегату EndReceive(IAsyncResult) по завершении операции.

Возвращаемое значение

IAsyncResult

Объект IAsyncResult, который ссылается на асинхронное чтение.

Атрибуты

Исключения

buffer имеет значение null.

только платформа .NET Framework и .NET 5 и более ранних версий: при попытке доступа к сокету произошла ошибка.

Объект Socket закрыт.

Комментарии

Асинхронная BeginReceive операция должна быть завершена EndReceive путем вызова метода. Как правило, метод вызывается делегатом callback .

Этот метод не блокируется до завершения операции. Чтобы заблокировать работу до завершения операции, используйте одну из Receive перегрузок метода.

Чтобы отменить ожидающий BeginReceive, вызовите Close метод.

Подробные сведения об использовании асинхронной модели программирования см. в разделе "Асинхронные вызовы синхронных методов".

Примечание

При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows sockets версии 2, чтобы получить подробное описание ошибки.

Примечание

Все операции ввода-вывода, инициированные заданным потоком, отменяются при выходе из этого потока. Ожидающая асинхронная операция может завершиться ошибкой, если поток завершает работу до завершения операции.

Примечание

state — это экземпляр определяемого пользователем класса.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. Дополнительные сведения см. в разделе "Трассировка сети" в платформа .NET Framework.

Примечание

Контекст выполнения (контекст безопасности, олицетворенный пользователь и вызывающий контекст) кэшируется для асинхронных Socket методов. После первого использования определенного контекста (конкретный асинхронный Socket метод, конкретный Socket экземпляр и конкретный обратный вызов) последующие использования этого контекста увидят улучшение производительности.

См. также раздел

Применяется к