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)
- 來源:
- 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
參數的值。
呼叫堆疊中的呼叫端沒有所需的使用權限。
備註
方法 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 擲回 。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .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
當此方法傳回時,包含定義通訊端錯誤碼的其中一個列舉值。
傳回
收到的位元組數目。
例外狀況
嘗試存取通訊端時發生錯誤。
呼叫堆疊中的呼叫端沒有所需的使用權限。
備註
方法 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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .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 物件,儲存通訊端錯誤。
傳回
收到的位元組數目。
例外狀況
嘗試存取通訊端時發生錯誤。
備註
這個方法會將數據讀取至 buffers
參數,並傳回成功讀取的位元元組數目。 您可以從連接導向和無連線套接字話。
此多載需要您提供一或多個接收緩衝區。 值 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 目的地位址讀取第一個佇列數據報。 如果您收到的數據報大於參數的大小 buffers
,則會填入訊息的第一個部分, buffers
則會遺失多餘的數據,並 SocketException 擲回 。
注意
如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .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
的大小。
嘗試存取通訊端時發生錯誤。
呼叫堆疊中的呼叫端沒有所需的使用權限。
範例
下列會接收 中找到buffer
的數據,並針對 SocketFlags指定 None 。
// 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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .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
指定傳送與接收行為的列舉值位元組合。
傳回
收到的位元組數目。
例外狀況
嘗試存取通訊端時發生錯誤。
呼叫堆疊中的呼叫端沒有所需的使用權限。
備註
方法 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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .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
參數的值。
呼叫堆疊中的呼叫端沒有所需的使用權限。
範例
下列程式代碼範例會指定數據緩衝區、位移、大小和套接字旗標,再接收連線 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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .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
。
嘗試存取通訊端時發生錯誤。
呼叫堆疊中的呼叫端沒有所需的使用權限。
範例
下列程式代碼範例會指定數據緩衝區,以及 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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .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
參數
傳回
收到的位元組數目。
例外狀況
嘗試存取通訊端時發生錯誤。
呼叫堆疊中的呼叫端沒有所需的使用權限。
備註
方法 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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .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
。
嘗試存取通訊端時發生錯誤。
備註
這個方法會將數據讀取到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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意 當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .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上接收數據。
// 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只會讀取從 或 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 Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .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上接收數據。
// 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設定逾時值,否則方法會封鎖直到數據可用為止。 如果超過逾時值,呼叫 Receive 會擲回 SocketException。 如果您處於非封鎖模式,且通訊協定堆疊緩衝區中沒有可用的數據,方法 Receive 會立即完成並擲回 SocketException。 您可以使用 Available 屬性來判斷資料是否可供讀取。 當 Available 為非零時,請重試接收作業。
如果您使用連接導向 Socket,則 Receive 方法會讀取可用的數據量,最多到緩衝區的大小。 如果遠端主機關閉 Socket 與 方法的 Shutdown 連線,而且已收到所有可用的數據, Receive 則方法會立即完成,並傳回零個字節。
如果您使用無 Socket連接 , Receive 將會從您在 方法中指定的 Connect 目的地位址讀取第一個加入佇列的數據報。 如果您收到的數據報大於參數的大小 buffers
,則會填入訊息的第一個部分, buffers
則會遺失多餘的數據,並 SocketException 擲回 。
注意
如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
另請參閱
- Connect(EndPoint)
- ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Available
- Shutdown(SocketShutdown)
- Close()