Socket.Receive 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
接收来自绑定的 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)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- 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
参数的值。
调用堆栈中的调用方没有所需的权限。
注解
方法 Receive 将数据读入 buffer 参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive 。
如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。
如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 如果超过超时值,调用 Receive 将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 尝试访问套接字时出错。 请参阅下面的备注。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。
如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大为 size 参数指定的字节数。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。
如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 buffer
, buffer
则会用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
适用于
Receive(Span<Byte>, SocketFlags, SocketError)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- 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
当此方法返回时,将包含定义套接字错误代码的枚举值之一。
返回
收到的字节数。
例外
尝试访问套接字时出错。
调用堆栈中的调用方没有所需的权限。
注解
方法 Receive 将数据读入 buffer 参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive 。
此重载只需要提供接收缓冲区。 缓冲区偏移量默认为 0,大小默认为缓冲区参数的长度, SocketFlags 值默认为 None。
如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。
如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 超过超时值时, Receive 调用将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。
如果使用的是面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。
如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 buffer
, buffer
则会用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。
注意
如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
适用于
Receive(IList<ArraySegment<Byte>>, SocketFlags, SocketError)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- 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 对象,它存储套接字错误。
返回
收到的字节数。
例外
尝试访问套接字时出错。
注解
此方法将数据读入 参数, buffers
并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 。
此重载要求提供一个或多个接收缓冲区。 值 SocketFlags 默认为 None。
如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机连接到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。
如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 如果超过超时值,调用将ReceiveSocketException引发 。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。
如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。
如果使用无 Socket连接 ,Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 buffers
, buffers
则会用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。
注意
如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
适用于
Receive(Byte[], Int32, SocketFlags)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- 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
的大小。
尝试访问套接字时出错。
调用堆栈中的调用方没有所需的权限。
示例
以下内容接收在 中找到 buffer
的数据,并为 指定 NoneSocketFlags。
// Receive the host home page content and loop until all the data is received.
Int32 bytes = s->Receive( RecvBytes, RecvBytes->Length, SocketFlags::None );
strRetPage = "Default HTML page on ";
strRetPage->Concat( server, ":\r\n", ASCII->GetString( RecvBytes, 0, bytes ) );
while ( bytes > 0 )
{
bytes = s->Receive( RecvBytes, RecvBytes->Length, SocketFlags::None );
strRetPage->Concat( ASCII->GetString( RecvBytes, 0, bytes ) );
}
// Receive the host home page content and loop until all the data is received.
Int32 bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
strRetPage = "Default HTML page on " + server + ":\r\n";
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
while (bytes > 0)
{
bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
}
' Receive the host home page content and loop until all the data is received.
'Dim bytes As Int32 = s.Receive(RecvBytes, RecvBytes.Length, 0)
Dim bytes As Int32 = s.Receive(RecvBytes, RecvBytes.Length, 0)
strRetPage = "Default HTML page on " + server + ":\r\n"
strRetPage = "Default HTML page on " + server + ":" + ControlChars.Lf + ControlChars.NewLine
Dim i As Integer
While bytes > 0
bytes = s.Receive(RecvBytes, RecvBytes.Length, 0)
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes)
End While
注解
方法 Receive 将数据读入 参数, buffer
并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive 。
此重载只需提供接收缓冲区、要接收的字节数和必要的 SocketFlags。
如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。
如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 如果超过超时值,调用 Receive 将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 该方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。
如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大为 参数指定的 size
字节数。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。
如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 buffer
, buffer
则会用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。
注意
如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
适用于
Receive(Span<Byte>, SocketFlags)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- 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
枚举值的按位组合,它用于指定发送和接收行为。
返回
收到的字节数。
例外
尝试访问套接字时出错。
调用堆栈中的调用方没有所需的权限。
注解
方法 Receive 将数据读入 buffer 参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive 。
此重载只需要提供接收缓冲区。 缓冲区偏移量默认为 0,大小默认为缓冲区参数的长度, SocketFlags 值默认为 None。
如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。
如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 超过超时值时, Receive 调用将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。
如果使用的是面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。
如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 buffer
, buffer
则会用消息的第一部分填充,多余数据将丢失,并 SocketException 引发 。
注意
如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
适用于
Receive(Byte[], Int32, Int32, SocketFlags)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- 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
参数的值。
调用堆栈中的调用方没有所需的权限。
示例
下面的代码示例指定在连接的 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将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 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 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
适用于
Receive(Byte[], SocketFlags)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- 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
。
尝试访问套接字时出错。
调用堆栈中的调用方没有所需的权限。
示例
下面的代码示例指定一个数据缓冲区,并 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将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许接收来自任何主机的数据。
如果没有可用于读取的数据,方法 Receive 将阻止数据,直到数据可用。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可供读取。 如果 Available 为非零,请重试接收操作。
如果使用的是面向 Socket连接的 ,则 Receive 方法将读取与缓冲区大小一样多的数据。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。
如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 buffer
, buffer
则使用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。
注意
如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
适用于
Receive(Span<Byte>)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- 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
参数
返回
收到的字节数。
例外
尝试访问套接字时出错。
调用堆栈中的调用方没有所需的权限。
注解
方法 Receive 将数据读入缓冲区参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive 。
此重载仅要求提供接收缓冲区。 缓冲区偏移量默认为 0,大小默认为缓冲区参数的长度, SocketFlags 值默认为 None。
如果使用面向连接的协议,则必须调用 Connect 来建立远程主机连接,或者在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许接收来自任何主机的数据。
如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则 方法将阻止数据,直到数据可用。 超过超时值时, Receive 调用将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可供读取。 如果 Available 为非零,请重试接收操作。
如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。
如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队数据报。 如果收到的数据报大于 参数的大小 buffer
, buffer
则使用消息的第一部分填充,多余的数据将丢失,并 SocketException 引发 。
注意
如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
适用于
Receive(IList<ArraySegment<Byte>>)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- 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
。
尝试访问套接字时出错。
注解
此方法将数据读取到 buffers 参数中,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用。
此重载要求提供一个或多个接收缓冲区。
如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机连接到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。
如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 如果超过超时值,调用 Receive 将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。
如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。
如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队数据报。 如果收到的数据报大于 参数的大小 buffers
, buffers
则会用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。
注意
如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。
注意 在应用程序中启用网络跟踪时,此成员输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
适用于
Receive(Byte[])
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- 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上的数据。
// 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 将数据读入 buffer 参数,并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 Receive 。
此重载只需要提供接收缓冲区。 缓冲区偏移量默认为 0,大小默认为缓冲区参数的长度, SocketFlags 值默认为 None。
如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。
如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 如果超过超时值,调用 Receive 将引发 SocketException。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。
如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。
如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队的数据报。 如果收到的数据报大于 参数的大小 buffer
, buffer
则会用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。
注意
如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()
适用于
Receive(IList<ArraySegment<Byte>>, SocketFlags)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- 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上接收数据。
// Build the buffers for the receive.
List<ArraySegment<Byte> >^ receiveBuffers =
gcnew List<ArraySegment<Byte> >(2);
array<Byte>^ bigBuffer = gcnew array<Byte>(1024);
// Specify the first buffer segment (2 bytes, starting
// at the 4th element of bigBuffer)
receiveBuffers->Add(ArraySegment<Byte>(bigBuffer, 4, 2));
// Specify the second buffer segment (500 bytes, starting
// at the 20th element of bigBuffer)
receiveBuffers->Add(
ArraySegment<Byte>(bigBuffer, 20, 500));
tcpSocket->Receive(receiveBuffers);
Console::WriteLine("{0}",
asciiEncoding->GetString(bigBuffer));
// Build the buffers for the receive.
List<ArraySegment<byte>> recvBuffers =
new List<ArraySegment<byte>>(2);
byte[] bigBuffer = new byte[1024];
// Specify the first buffer segment (2 bytes, starting
// at the 4th element of bigBuffer)
recvBuffers.Add(new ArraySegment<byte>(bigBuffer, 4, 2));
// Specify the second buffer segment (500 bytes, starting
// at the 20th element of bigBuffer)
recvBuffers.Add(new ArraySegment<byte>(bigBuffer, 20, 500));
int bytesReceived = mySocket.Receive(recvBuffers);
Console.WriteLine("{0}", ASCII.GetString(bigBuffer));
注解
此方法将数据读入 参数, buffers
并返回成功读取的字节数。 可以从面向连接的套接字和无连接套接字调用 。
此重载要求提供一个或多个接收缓冲区。 值 SocketFlags 默认为 None。
如果使用面向连接的协议,则必须调用 Connect 以建立远程主机连接,或在 Accept 调用 Receive之前接受传入连接。 方法Receive将仅读取从 或 Accept 方法中Connect建立的远程主机连接到达的数据。 如果使用无连接协议,也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许你接收来自任何主机的数据。
如果没有可用于读取的数据,除非 Receive 使用 Socket.ReceiveTimeout设置了超时值,否则方法将阻止数据,直到数据可用。 如果超过超时值,调用将ReceiveSocketException引发 。 如果处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 可以使用 Available 属性来确定数据是否可用于读取。 如果 Available 为非零,请重试接收操作。
如果使用面向 Socket连接的 ,则 Receive 方法将读取尽可能多的可用数据,最大大小为缓冲区大小。 如果远程主机关闭 Socket 了与 Shutdown 方法的连接,并且已收到所有可用数据,则 Receive 该方法将立即完成并返回零个字节。
如果使用无 Socket连接 , Receive 将从在 方法中指定的 Connect 目标地址读取第一个排队数据报。 如果收到的数据报大于 参数的大小 buffers
, buffers
则会用消息的第一部分填充,多余的数据将丢失并 SocketException 引发 。
注意
如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
另请参阅
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()