Socket.Receive Метод

Определение

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

Перегрузки

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

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.

Receive(Span<Byte>, SocketFlags, SocketError)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.

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

Получает данные из связанного объекта Socket в список приемных буферов, используя заданный объект SocketFlags.

Receive(Byte[], Int32, SocketFlags)

Получает указанное число байтов данных из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.

Receive(Span<Byte>, SocketFlags)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.

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

Получает указанное число байтов данных из связанного объекта Socket в приемный буфер с указанной позиции смещения, используя заданный объект SocketFlags.

Receive(Byte[], SocketFlags)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.

Receive(Span<Byte>)

Возвращает данные из связанного объекта Socket в приемный буфер.

Receive(IList<ArraySegment<Byte>>)

Получает данные из связанного объекта Socket в список приемных буферов.

Receive(Byte[])

Возвращает данные из связанного объекта Socket в приемный буфер.

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

Получает данные из связанного объекта Socket в список приемных буферов, используя заданный объект SocketFlags.

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

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.

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

Параметры

buffer
Byte[]

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

offset
Int32

Позиция в параметре buffer для хранения полученных данных.

size
Int32

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

socketFlags
SocketFlags

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

errorCode
SocketError

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

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

Количество полученных байтов.

Исключения

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

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

-или-

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

-или-

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

-или-

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

Socket был закрыт.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.

Комментарии

Метод Receive считывает данные в параметр буфера и возвращает количество успешно прочитанных байтов. Вызов можно выполнять Receive как из сокетов, ориентированных на подключение, так и из сокетов без подключения.

Если вы используете протокол, ориентированный на подключение, необходимо вызвать метод Connect , чтобы установить подключение к удаленному узлу, или Accept принять входящее подключение перед вызовом Receive. Метод Receive будет считывать только данные, поступающие с удаленного узла, установленного в методе Connect или Accept . Если вы используете протокол без подключения, можно также использовать ReceiveFrom метод . ReceiveFrom позволяет получать данные, поступающие с любого узла.

Если данные недоступны для чтения, Receive метод блокируется, пока данные не станут доступными, если значение времени ожидания не было задано с помощью Socket.ReceiveTimeout. Если превышено время ожидания, Receive вызов вызовет исключение SocketException. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов отсутствуют данные, Receive метод немедленно завершит работу и вызовет SocketExceptionисключение . Произошла ошибка при попытке доступа к сокету. См. примечания ниже. Свойство можно использовать, Available чтобы определить, доступны ли данные для чтения. Если Available значение не равно нулю, повторите операцию получения.

Если вы используете ориентированный на подключение Socketметод Receive будет считывать столько данных, сколько доступно, вплоть до количества байтов, указанного параметром size. Если удаленный узел завершает Socket подключение к методу Shutdown и все доступные данные получены, Receive метод немедленно завершает работу и возвращает ноль байтов.

Если вы используете без Socketподключения , Receive считывает первую датаграмму в очереди из адреса назначения, указанного в методе Connect . Если полученная датаграмма больше, чем размер buffer параметра, buffer заполняется первой частью сообщения, лишние данные теряются и SocketException возникает исключение .

Примечание

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

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

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

Receive(Span<Byte>, SocketFlags, SocketError)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.

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

Параметры

buffer
Span<Byte>

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

socketFlags
SocketFlags

Побитовое сочетание значений перечисления, которое задает поведение получения и отправки.

errorCode
SocketError

При возврате из этого метода содержит одно из значений перечисления, которое определяет коды ошибок для сокета.

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

Количество полученных байтов.

Исключения

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.

Комментарии

Метод Receive считывает данные в параметр буфера и возвращает количество успешно прочитанных байтов. Вызов можно выполнять Receive как из сокетов, ориентированных на подключение, так и из сокетов без подключения.

Для этой перегрузки требуется только предоставить буфер получения. Смещение буфера по умолчанию равно 0, размер по умолчанию — длине параметра буфера SocketFlags , а значение по умолчанию — None.

Если вы используете протокол, ориентированный на подключение, необходимо вызвать метод Connect , чтобы установить подключение к удаленному узлу, или Accept принять входящее подключение перед вызовом Receive. Метод Receive будет считывать только данные, поступающие с удаленного узла, установленного в методе Connect или Accept . Если вы используете протокол без подключения, можно также использовать ReceiveFrom метод . ReceiveFrom позволяет получать данные, поступающие с любого узла.

Если данные недоступны для чтения, Receive метод блокируется, пока данные не станут доступными, если значение времени ожидания не было задано с помощью Socket.ReceiveTimeout. При превышении Receive значения времени ожидания вызов вызовет исключение SocketException. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов нет данных, Receive метод немедленно завершит работу и вызовет SocketExceptionисключение . Свойство можно использовать, Available чтобы определить, доступны ли данные для чтения. Если Available значение не равно нулю, повторите операцию получения.

Если вы используете ориентированный на подключение Socketметод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера. Если удаленный узел завершает Socket подключение к методу Shutdown и все доступные данные получены, Receive метод немедленно завершает работу и возвращает ноль байтов.

Если вы используете без Socketподключения , Receive считывает первую датаграмму в очереди из адреса назначения, указанного в методе Connect . Если полученная датаграмма больше, чем размер buffer параметра, buffer заполняется первой частью сообщения, лишние данные теряются и SocketException возникает исключение .

Примечание

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

Примечание

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

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

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

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

Получает данные из связанного объекта Socket в список приемных буферов, используя заданный объект SocketFlags.

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

Параметры

buffers
IList<ArraySegment<Byte>>

Список объектов ArraySegment<T> типа Byte, содержащих полученные данные.

socketFlags
SocketFlags

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

errorCode
SocketError

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

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

Количество полученных байтов.

Исключения

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

-или-

Значение buffers. Отсчет равен нулю.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Комментарии

Этот метод считывает данные в buffers параметр и возвращает число успешно прочитанных байтов. Вызов можно выполнять как из сокетов, ориентированных на подключение, так и из сокетов без подключения.

Для этой перегрузки требуется предоставить один или несколько буферов получения. Значение SocketFlags по умолчанию равно None.

Если вы используете протокол, ориентированный на подключение, необходимо либо вызвать Connect , чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive. Метод Receive считывает только данные, поступающие из подключения к удаленному узлу, установленного в методе Connect или Accept . Если вы используете протокол без подключения, можно также использовать ReceiveFrom метод . ReceiveFrom позволяет получать данные, поступающие с любого узла.

Если данные недоступны для чтения, Receive метод блокируется до тех пор, пока данные не станут доступными, если значение времени ожидания не было задано с помощью Socket.ReceiveTimeout. Если превышено время ожидания, Receive вызов вызывает исключение SocketException. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов нет данных, Receive метод завершится немедленно и вызовет SocketExceptionисключение . Свойство можно использовать, Available чтобы определить, доступны ли данные для чтения. Если Available значение не равно нулю, повторите операцию получения.

Если вы используете ориентированный на подключение Socketметод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера. Если удаленный узел завершает Socket подключение к методу Shutdown и все доступные данные получены, Receive метод выполняется немедленно и возвращает ноль байтов.

Если вы используете без Socketподключения ,Receive считывает первую датаграмму в очереди из адреса назначения, указанного в методе Connect . Если полученная датаграмма больше размера buffers параметра, buffers заполняется первой частью сообщения, лишние данные теряются и SocketException возникает исключение .

Примечание

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

Примечание

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

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

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

Receive(Byte[], Int32, SocketFlags)

Получает указанное число байтов данных из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.

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

Параметры

buffer
Byte[]

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

size
Int32

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

socketFlags
SocketFlags

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

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

Количество полученных байтов.

Исключения

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

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

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.

Примеры

Следующий код получает данные, найденные в buffer, и указывает None для 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

Комментарии

Метод Receive считывает данные в buffer параметр и возвращает число успешно прочитанных байтов. Вызов можно выполнять Receive как из сокетов, ориентированных на подключение, так и из сокетов без подключения.

Для этой перегрузки требуется только указать буфер получения, количество байтов, которое требуется получить, и необходимые SocketFlags.

Если вы используете протокол, ориентированный на подключение, необходимо либо вызвать Connect , чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive. Метод Receive считывает только данные, поступающие с удаленного узла, установленного в методе Connect или Accept . Если вы используете протокол без подключения, можно также использовать ReceiveFrom метод . ReceiveFrom позволяет получать данные, поступающие с любого узла.

Если данные недоступны для чтения, Receive метод блокируется до тех пор, пока данные не станут доступными, если значение времени ожидания не было задано с помощью Socket.ReceiveTimeout. Если превышено время ожидания, Receive вызов вызовет исключение SocketException. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов нет данных, Receive метод завершится немедленно и вызовет SocketExceptionисключение . Свойство можно использовать, Available чтобы определить, доступны ли данные для чтения. Если Available значение не равно нулю, повторите операцию получения.

Если вы используете ориентированный на подключение Socketметод Receive будет считывать столько данных, сколько доступно, вплоть до количества байтов, указанного параметром size . Если удаленный узел завершает Socket подключение к методу Shutdown и все доступные данные получены, Receive метод выполняется немедленно и возвращает ноль байтов.

Если вы используете без Socketподключения , Receive считывает первую датаграмму в очереди из адреса назначения, указанного в методе Connect . Если полученная датаграмма больше размера buffer параметра, buffer заполняется первой частью сообщения, лишние данные теряются и SocketException возникает исключение .

Примечание

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

Примечание

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

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

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

Receive(Span<Byte>, SocketFlags)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.

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

Параметры

buffer
Span<Byte>

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

socketFlags
SocketFlags

Побитовое сочетание значений перечисления, которое задает поведение получения и отправки.

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

Количество полученных байтов.

Исключения

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.

Комментарии

Метод Receive считывает данные в параметр buffer и возвращает число успешно прочитанных байтов. Вызов можно выполнять Receive как из сокетов, ориентированных на подключение, так и из сокетов без подключения.

Для этой перегрузки требуется только предоставить буфер получения. Смещение буфера по умолчанию равно 0, размер по умолчанию — длину параметра буфера, а SocketFlags значение по умолчанию — None.

Если вы используете протокол, ориентированный на подключение, необходимо либо вызвать Connect для установки подключения к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive. Метод Receive считывает только данные, поступающие с удаленного узла, установленного в методе Connect или Accept . Если вы используете протокол без подключения, можно также использовать ReceiveFrom метод . ReceiveFrom позволяет получать данные, поступающие с любого узла.

Если данные недоступны для чтения, Receive метод блокируется до тех пор, пока данные не станут доступными, если значение времени ожидания не было задано с помощью Socket.ReceiveTimeout. При превышении Receive значения времени ожидания вызов вызовет исключение SocketException. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов нет данных, Receive метод завершится немедленно и вызовет SocketExceptionисключение . Свойство можно использовать, Available чтобы определить, доступны ли данные для чтения. Если Available значение не равно нулю, повторите операцию получения.

Если вы используете ориентированный Socketна подключение метод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера. Если удаленный узел завершает Socket подключение к методу Shutdown и все доступные данные получены, Receive метод выполняется немедленно и возвращает ноль байтов.

Если вы используете без Socketподключения , Receive считывает первую датаграмму в очереди из адреса назначения, указанного в методе Connect . Если полученная датаграмма больше, чем размер buffer параметра, buffer заполняется первой частью сообщения, лишние данные теряются и SocketException возникает исключение .

Примечание

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

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

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

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

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

Получает указанное число байтов данных из связанного объекта Socket в приемный буфер с указанной позиции смещения, используя заданный объект SocketFlags.

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

Параметры

buffer
Byte[]

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

offset
Int32

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

size
Int32

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

socketFlags
SocketFlags

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

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

Количество полученных байтов.

Исключения

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

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

-или-

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

-или-

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

-или-

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

socketFlags — недопустимое сочетание значений.

-или-

Свойство LocalEndPoint не задано.

-или-

Произошла ошибка операционной системы при доступе к Socket.

Socket был закрыт.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.

Примеры

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

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

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

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

End Function 'SendReceiveTest4

Комментарии

Метод Receive считывает данные в параметр buffer и возвращает число успешно прочитанных байтов. Вызов можно выполнять Receive как из сокетов, ориентированных на подключение, так и из сокетов без подключения.

Если вы используете протокол, ориентированный на подключение, необходимо либо вызвать Connect , чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive. Метод Receive считывает только данные, поступающие с удаленного узла, установленного в методе Connect или Accept . Если вы используете протокол без подключения, можно также использовать ReceiveFrom метод . ReceiveFrom позволяет получать данные, поступающие с любого узла.

Если данные недоступны для чтения, Receive метод блокируется до тех пор, пока данные не станут доступными, если значение времени ожидания не было задано с помощью Socket.ReceiveTimeout. Если превышено время ожидания, Receive вызов вызовет исключение SocketException. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов нет данных, Receive метод завершится немедленно и вызовет SocketExceptionисключение . Произошла ошибка при попытке доступа к сокету. См. примечания ниже. Свойство можно использовать, Available чтобы определить, доступны ли данные для чтения. Если Available значение не равно нулю, повторите операцию получения.

Если вы используете ориентированный на подключение Socketметод Receive будет считывать столько данных, сколько доступно, вплоть до количества байтов, указанного параметром size. Если удаленный узел завершает Socket подключение к методу Shutdown и все доступные данные получены, Receive метод выполняется немедленно и возвращает ноль байтов.

Если вы используете без Socketподключения , Receive считывает первую датаграмму в очереди из адреса назначения, указанного в методе Connect . Если полученная датаграмма больше размера buffer параметра, buffer заполняется первой частью сообщения, лишние данные теряются и SocketException возникает исключение .

Примечание

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

Примечание

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

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

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

Receive(Byte[], SocketFlags)

Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.

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

Параметры

buffer
Byte[]

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

socketFlags
SocketFlags

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

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

Количество полученных байтов.

Исключения

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

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.

Примеры

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

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

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

End Function 'SendReceiveTest2

Комментарии

Метод Receive считывает данные в параметр buffer и возвращает число успешно прочитанных байтов. Вызов можно выполнять Receive как из сокетов, ориентированных на подключение, так и из сокетов без подключения.

Для этой перегрузки требуется только предоставить буфер получения и необходимые SocketFlags. Смещение буфера по умолчанию составляет 0, а размер по умолчанию — длину параметра байта.

Если вы используете протокол, ориентированный на подключение, необходимо либо вызвать Connect , чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive. Метод Receive считывает только данные, поступающие с удаленного узла, установленного в методе Connect или Accept . Если вы используете протокол без подключения, можно также использовать ReceiveFrom метод . ReceiveFrom позволяет получать данные, поступающие с любого узла.

Если данные недоступны для чтения, метод блокируется до тех пор, Receive пока данные не станут доступны. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов нет данных, Receive метод завершится немедленно и вызовет SocketExceptionисключение . Свойство можно использовать, Available чтобы определить, доступны ли данные для чтения. Если Available значение не равно нулю, повторите операцию получения.

Если вы используете ориентированный на подключение Socketметод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера. Если удаленный узел завершает Socket подключение к методу Shutdown и все доступные данные получены, Receive метод выполняется немедленно и возвращает ноль байтов.

Если вы используете без Socketподключения , Receive считывает первую помещенную в очередь датаграмму из адреса назначения, указанного в методе Connect . Если полученная датаграмма больше размера buffer параметра, buffer заполняется первой частью сообщения, лишние данные теряются и SocketException возникает исключение .

Примечание

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

Примечание

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

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

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

Receive(Span<Byte>)

Возвращает данные из связанного объекта Socket в приемный буфер.

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

Параметры

buffer
Span<Byte>

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

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

Количество полученных байтов.

Исключения

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.

Комментарии

Метод Receive считывает данные в параметр buffer и возвращает число успешно прочитанных байтов. Вызов можно выполнять Receive как из сокетов, ориентированных на подключение, так и из сокетов без подключения.

Для этой перегрузки требуется только предоставить буфер получения. Смещение буфера по умолчанию равно 0, размер по умолчанию — длину параметра буфера, а SocketFlags значение по умолчанию — None.

Если вы используете протокол, ориентированный на подключение, необходимо либо вызвать Connect , чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive. Метод Receive считывает только данные, поступающие с удаленного узла, установленного в методе Connect или Accept . Если вы используете протокол без подключения, можно также использовать ReceiveFrom метод . ReceiveFrom позволяет получать данные, поступающие с любого узла.

Если данные недоступны для чтения, Receive метод блокируется до тех пор, пока данные не станут доступными, если значение времени ожидания не было задано с помощью Socket.ReceiveTimeout. При превышении Receive значения времени ожидания вызов вызовет исключение SocketException. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов нет данных, Receive метод завершится немедленно и вызовет SocketExceptionисключение . Свойство можно использовать, Available чтобы определить, доступны ли данные для чтения. Если Available значение не равно нулю, повторите операцию получения.

Если вы используете ориентированный Socketна подключение метод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера. Если удаленный узел завершает Socket подключение к методу Shutdown и все доступные данные получены, Receive метод выполняется немедленно и возвращает ноль байтов.

Если вы используете без Socketподключения , Receive считывает первую датаграмму в очереди из адреса назначения, указанного в методе Connect . Если полученная датаграмма больше, чем размер buffer параметра, buffer заполняется первой частью сообщения, лишние данные теряются и SocketException возникает исключение .

Примечание

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

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

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

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

Receive(IList<ArraySegment<Byte>>)

Получает данные из связанного объекта Socket в список приемных буферов.

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

Параметры

buffers
IList<ArraySegment<Byte>>

Список объектов ArraySegment<T> типа Byte, содержащих полученные данные.

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

Количество полученных байтов.

Исключения

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

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Комментарии

Этот метод считывает данные в параметр buffers и возвращает количество успешно прочитанных байтов. Вызов можно выполнять как из сокетов, ориентированных на подключение, так и из сокетов без подключения.

Для этой перегрузки требуется предоставить один или несколько буферов получения.

Если вы используете протокол, ориентированный на подключение, необходимо либо вызвать Connect , чтобы установить подключение к удаленному узлу, либо Accept принять входящее подключение перед вызовом Receive. Метод Receive считывает только данные, поступающие из подключения к удаленному узлу, установленного в методе Connect или Accept . Если вы используете протокол без подключения, можно также использовать ReceiveFrom метод . ReceiveFrom позволяет получать данные, поступающие с любого узла.

Если данные недоступны для чтения, Receive метод блокируется, пока данные не станут доступными, если значение времени ожидания не было задано с помощью Socket.ReceiveTimeout. Если превышено время ожидания, Receive вызов вызовет исключение SocketException. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов отсутствуют данные, Receive метод немедленно завершит работу и вызовет SocketExceptionисключение . Свойство можно использовать, Available чтобы определить, доступны ли данные для чтения. Если Available значение не равно нулю, повторите операцию получения.

Если вы используете ориентированный на подключение Socketметод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера. Если удаленный узел завершает Socket подключение к методу Shutdown и все доступные данные получены, Receive метод немедленно завершает работу и возвращает ноль байтов.

Если вы используете без Socketподключения , Receive считывает первую датаграмму, помещенную в очередь, из адреса назначения, указанного в методе Connect . Если полученная датаграмма больше, чем размер buffers параметра, buffers заполняется первой частью сообщения, лишние данные теряются и SocketException возникает исключение .

Примечание

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

Примечание Этот элемент выводит сведения трассировки при включении трассировки сети в приложении. Дополнительные сведения см. в статье Трассировка сети в платформа .NET Framework.

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

Receive(Byte[])

Возвращает данные из связанного объекта Socket в приемный буфер.

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

Параметры

buffer
Byte[]

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

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

Количество полученных байтов.

Исключения

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

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Вызывающий оператор в стеке вызовов не имеет необходимых разрешений.

Примеры

В следующем примере кода показано, как получить данные на подключенном объекте Socket.

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

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

End Function 'SendReceiveTest1

Комментарии

Метод Receive считывает данные в параметр буфера и возвращает количество успешно прочитанных байтов. Вызов можно выполнять Receive как из сокетов, ориентированных на подключение, так и из сокетов без подключения.

Для этой перегрузки требуется только предоставить буфер получения. Смещение буфера по умолчанию равно 0, размер по умолчанию — длине параметра буфера SocketFlags , а значение по умолчанию — None.

Если вы используете протокол, ориентированный на подключение, необходимо вызвать метод Connect , чтобы установить подключение к удаленному узлу, или Accept принять входящее подключение перед вызовом Receive. Метод Receive будет считывать только данные, поступающие с удаленного узла, установленного в методе Connect или Accept . Если вы используете протокол без подключения, можно также использовать ReceiveFrom метод . ReceiveFrom позволяет получать данные, поступающие с любого узла.

Если данные недоступны для чтения, Receive метод блокируется, пока данные не станут доступными, если значение времени ожидания не было задано с помощью Socket.ReceiveTimeout. Если превышено время ожидания, Receive вызов вызовет исключение SocketException. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов отсутствуют данные, Receive метод немедленно завершит работу и вызовет SocketExceptionисключение . Свойство можно использовать, Available чтобы определить, доступны ли данные для чтения. Если Available значение не равно нулю, повторите операцию получения.

Если вы используете ориентированный на подключение Socketметод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера. Если удаленный узел завершает Socket подключение к методу Shutdown и все доступные данные получены, Receive метод немедленно завершает работу и возвращает ноль байтов.

Если вы используете без Socketподключения , Receive считывает первую датаграмму в очереди из адреса назначения, указанного в методе Connect . Если полученная датаграмма больше, чем размер buffer параметра, buffer заполняется первой частью сообщения, лишние данные теряются и SocketException возникает исключение .

Примечание

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

Примечание

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

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

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

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

Получает данные из связанного объекта Socket в список приемных буферов, используя заданный объект SocketFlags.

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

Параметры

buffers
IList<ArraySegment<Byte>>

Список объектов ArraySegment<T> типа Byte, содержащих полученные данные.

socketFlags
SocketFlags

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

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

Количество полученных байтов.

Исключения

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

-или-

Значение buffers. Отсчет равен нулю.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Примеры

В следующем примере кода показано, как получать данные в подключенном Socketобъекте .


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

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

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

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

tcpSocket->Receive(receiveBuffers);

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

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

byte[] bigBuffer = new byte[1024];

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

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

int bytesReceived = mySocket.Receive(recvBuffers);

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

Комментарии

Этот метод считывает данные в buffers параметр и возвращает число успешно прочитанных байтов. Вызов можно выполнять как из сокетов, ориентированных на подключение, так и из сокетов без подключения.

Для этой перегрузки требуется предоставить один или несколько буферов получения. Значение SocketFlags по умолчанию равно None.

Если вы используете протокол, ориентированный на подключение, необходимо вызвать метод Connect , чтобы установить подключение к удаленному узлу, или Accept принять входящее подключение перед вызовом Receive. Метод Receive считывает только данные, поступающие из подключения к удаленному узлу, установленного в методе Connect или Accept . Если вы используете протокол без подключения, можно также использовать ReceiveFrom метод . ReceiveFrom позволяет получать данные, поступающие с любого узла.

Если данные недоступны для чтения, Receive метод блокируется, пока данные не станут доступными, если значение времени ожидания не было задано с помощью Socket.ReceiveTimeout. Если превышено время ожидания, Receive вызов вызывает исключение SocketException. Если вы находитесь в неблокирующем режиме и в буфере стека протоколов отсутствуют данные, Receive метод немедленно завершит работу и вызовет SocketExceptionисключение . Свойство можно использовать, Available чтобы определить, доступны ли данные для чтения. Если Available значение не равно нулю, повторите операцию получения.

Если вы используете ориентированный на подключение Socketметод Receive будет считывать столько данных, сколько доступно, вплоть до размера буфера. Если удаленный узел завершает Socket подключение к методу Shutdown и все доступные данные получены, Receive метод немедленно завершает работу и возвращает ноль байтов.

Если вы используете без Socketподключения , Receive считывает первую датаграмму, помещенную в очередь, из адреса назначения, указанного в методе Connect . Если полученная датаграмма больше, чем размер buffers параметра, buffers заполняется первой частью сообщения, лишние данные теряются и SocketException возникает исключение .

Примечание

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

Примечание

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

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

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