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 會將數據讀入 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 中的網路追蹤

另請參閱

適用於

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 會將數據讀入 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 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 中的網路追蹤

另請參閱

適用於