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.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает данные из связанного объекта 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
Параметры
- 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.
См. также раздел
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
Применяется к
Receive(Span<Byte>, SocketFlags, SocketError)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает данные из связанного объекта 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
Параметры
- 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.
См. также раздел
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
Применяется к
Receive(IList<ArraySegment<Byte>>, SocketFlags, SocketError)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает данные из связанного объекта 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, содержащий ошибку сокета.
Возвращаемое значение
Количество полученных байтов.
Исключения
Произошла ошибка при попытке доступа к сокету.
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.
См. также раздел
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
Применяется к
Receive(Byte[], Int32, SocketFlags)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает указанное число байтов данных из связанного объекта 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
Параметры
- 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.
См. также раздел
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
Применяется к
Receive(Span<Byte>, SocketFlags)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает данные из связанного объекта 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
Параметры
- 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.
См. также раздел
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
Применяется к
Receive(Byte[], Int32, Int32, SocketFlags)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает указанное число байтов данных из связанного объекта 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
Параметры
- 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 считывает данные в параметр буфера и возвращает количество успешно прочитанных байтов. Вызов можно выполнять 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.
См. также раздел
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
Применяется к
Receive(Byte[], SocketFlags)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает данные из связанного объекта 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
Параметры
- 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 считывает данные в параметр буфера и возвращает количество успешно прочитанных байтов. Вызов можно выполнять 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.
См. также раздел
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
Применяется к
Receive(Span<Byte>)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Возвращает данные из связанного объекта 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
Параметры
Возвращаемое значение
Количество полученных байтов.
Исключения
Произошла ошибка при попытке доступа к сокету.
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.
См. также раздел
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
Применяется к
Receive(IList<ArraySegment<Byte>>)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает данные из связанного объекта 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.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Возвращает данные из связанного объекта 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
имеет значение 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.
См. также раздел
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
Применяется к
Receive(IList<ArraySegment<Byte>>, SocketFlags)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Получает данные из связанного объекта 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.
Возвращаемое значение
Количество полученных байтов.
Исключения
Произошла ошибка при попытке доступа к сокету.
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.
См. также раздел
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()