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

參數

buffer
Byte[]

Byte 型別的陣列,為收到資料的存放位置。

offset
Int32

buffer 參數中的位置,可儲存接收的資料。

size
Int32

要接收的位元組數。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

errorCode
SocketError

SocketError 物件,儲存通訊端錯誤。

傳回

收到的位元組數目。

例外狀況

buffernull

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 為非零時,請重試接收作業。

如果您使用連接導向 SocketReceive 則方法會讀取可用的數據量,上限為 size 參數所指定的位元元組數目。 如果遠端主機關閉 Socket 與 方法的 Shutdown 連線,而且已收到所有可用的數據, Receive 則方法會立即完成,並傳回零個字節。

如果您使用無 Socket連接 , Receive 將會從您在 方法中指定的 Connect 目的地位址讀取第一個佇列數據報。 如果您收到的數據報大於參數的大小 buffer ,則會填入訊息的第一個部分, buffer 則會遺失多餘的數據,並 SocketException 擲回 。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於

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

參數

buffer
Span<Byte>

位元組範圍,為收到資料的儲存位置。

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 中的網路追蹤

另請參閱

適用於

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 物件,儲存通訊端錯誤。

傳回

收到的位元組數目。

例外狀況

buffersnull

-或-

buffers.Count 為零。

嘗試存取通訊端時發生錯誤。

備註

這個方法會將數據讀取至 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 中的網路追蹤

另請參閱

適用於

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

參數

buffer
Byte[]

Byte 型別的陣列,為收到資料的存放位置。

size
Int32

要接收的位元組數。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

傳回

收到的位元組數目。

例外狀況

buffernull

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 為非零時,請重試您的接收作業。

如果您使用連接導向 SocketReceive 則方法會讀取可用的數據量,最多到 參數所 size 指定的位元元組數目。 如果遠端主機關閉 Socket 與 方法的 Shutdown 連線,而且已收到所有可用的數據, Receive 則方法會立即完成,並傳回零個字節。

如果您使用無 Socket連接 , Receive 將會從您在 方法中指定的 Connect 目的地位址讀取第一個佇列數據報。 如果您收到的數據報大於參數的大小 buffer ,則會填入訊息的第一個部分, buffer 則會遺失多餘的數據,並 SocketException 擲回 。

注意

如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於

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

參數

buffer
Span<Byte>

位元組範圍,為收到資料的儲存位置。

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 目的地位址讀取第一個佇列數據報。 如果您收到的數據報大於參數的大小 bufferbuffer 則會填入訊息的第一個部分、遺失多餘的數據,並 SocketException 擲回 。

注意

如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於

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

參數

buffer
Byte[]

類型 Byte 的陣列,此為接收資料的儲存位置。

offset
Int32

buffer 中存放已接收資料的位置。

size
Int32

要接收的位元組數。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

傳回

收到的位元組數目。

例外狀況

buffernull

offset 小於 0。

-或-

offset 大於 buffer 的長度。

-或-

size 小於 0。

-或-

size 大於 buffer 的長度減去 offset 參數的值。

socketFlags 不是有效的值組合。

-或-

未設定 LocalEndPoint 屬性。

-或-

在存取 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只會讀取從 或 Accept 方法中Connect建立之遠端主機抵達的數據。 如果您使用無連線通訊協定,您也可以使用 ReceiveFrom 方法。 ReceiveFrom 可讓您接收從任何主機抵達的數據。

如果沒有數據可供讀取, Receive 除非使用 Socket.ReceiveTimeout設定逾時值,否則方法會封鎖直到數據可用為止。 如果超過逾時值,呼叫 Receive 將會擲回 SocketException。 如果您處於非封鎖模式,且通訊協定堆疊緩衝區中沒有可用的數據,方法 Receive 會立即完成並擲回 SocketException。 嘗試存取通訊端時發生錯誤。 請參閱下方的「備註」。 您可以使用 Available 屬性來判斷資料是否可供讀取。 當 Available 為非零時,請重試接收作業。

如果您使用連接導向 SocketReceive 則方法會讀取可用的數據量,上限為 size 參數所指定的位元元組數目。 如果遠端主機關閉 Socket 與 方法的 Shutdown 連線,而且已收到所有可用的數據, Receive 則方法會立即完成,並傳回零個字節。

如果您使用無 Socket連接 , Receive 將會從您在 方法中指定的 Connect 目的地位址讀取第一個佇列數據報。 如果您收到的數據報大於參數的大小 buffer ,則會填入訊息的第一個部分, buffer 則會遺失多餘的數據,並 SocketException 擲回 。

注意

如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於

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

參數

buffer
Byte[]

Byte 型別的陣列,為收到資料的存放位置。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

傳回

收到的位元組數目。

例外狀況

buffernull

嘗試存取通訊端時發生錯誤。

呼叫堆疊中的呼叫端沒有所需的使用權限。

範例

下列程式代碼範例會指定數據緩衝區,以及 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 中的網路追蹤

另請參閱

適用於

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

參數

buffer
Span<Byte>

位元組範圍,為收到資料的儲存位置。

傳回

收到的位元組數目。

例外狀況

嘗試存取通訊端時發生錯誤。

呼叫堆疊中的呼叫端沒有所需的使用權限。

備註

方法 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 目的地位址讀取第一個佇列數據報。 如果您收到的數據報大於參數的大小 bufferbuffer 則會填入訊息的第一個部分、遺失多餘的數據,並 SocketException 擲回 。

注意

如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於

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
Byte[]

Byte 型別的陣列,為收到資料的存放位置。

傳回

收到的位元組數目。

例外狀況

buffernull

嘗試存取通訊端時發生錯誤。

呼叫堆疊中的呼叫端沒有所需的使用權限。

範例

下列程式代碼範例會在連接的 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 中的網路追蹤

另請參閱

適用於

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 值的位元組合。

傳回

收到的位元組數目。

例外狀況

buffersnull

-或-

buffers.Count 為零。

嘗試存取通訊端時發生錯誤。

範例

下列程式代碼範例示範如何在連接的 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 中的網路追蹤

另請參閱

適用於