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 接收資料至接收緩衝區中。

C#
public int Receive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);

參數

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1

Receive(Span<Byte>, SocketFlags, SocketError)

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

使用指定的 Socket,從已繫結的 SocketFlags 接收資料至接收緩衝區中。

C#
public int Receive (Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);

參數

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

Receive(IList<ArraySegment<Byte>>, SocketFlags, SocketError)

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

使用指定的 Socket,從已繫結的 SocketFlags 接收資料至接收緩衝區清單中。

C#
public int Receive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);

參數

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1

Receive(Byte[], Int32, SocketFlags)

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

使用指定的 Socket,從已繫結的 SocketFlags 將指定位元組數的資料接收至接收緩衝區中。

C#
public int Receive (byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags);

參數

buffer
Byte[]

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

size
Int32

要接收的位元組數。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

傳回

收到的位元組數目。

例外狀況

buffernull

size 超過 buffer 的大小。

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

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

範例

下列會接收 中找到buffer的數據,並針對 SocketFlags指定 None

C#

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1

Receive(Span<Byte>, SocketFlags)

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

使用指定的 Socket,從已繫結的 SocketFlags 接收資料至接收緩衝區中。

C#
public int Receive (Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags);

參數

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

Receive(Byte[], Int32, Int32, SocketFlags)

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

使用指定的 Socket,從已繫結的 SocketFlags 將指定的位元組數接收到接收緩衝區的指定位移位置。

C#
public int Receive (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags);

參數

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的數據。

C#
// 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;
}

備註

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1

Receive(Byte[], SocketFlags)

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

使用指定的 Socket,從已繫結的 SocketFlags 接收資料至接收緩衝區中。

C#
public int Receive (byte[] buffer, System.Net.Sockets.SocketFlags socketFlags);

參數

buffer
Byte[]

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

socketFlags
SocketFlags

SocketFlags 值的位元組合。

傳回

收到的位元組數目。

例外狀況

buffernull

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

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

範例

下列程式代碼範例會指定數據緩衝區,以及 SocketFlags 用於在連接的 Socket上接收數據。

C#
// 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;
}

備註

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1

Receive(Span<Byte>)

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

從已繫結的 Socket 接收資料至接收緩衝區中。

C#
public int Receive (Span<byte> buffer);

參數

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

Receive(IList<ArraySegment<Byte>>)

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

從已繫結的 Socket 接收資料至接收緩衝區清單中。

C#
public int Receive (System.Collections.Generic.IList<ArraySegment<byte>> buffers);

參數

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

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1

Receive(Byte[])

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

從已繫結的 Socket 接收資料至接收緩衝區中。

C#
public int Receive (byte[] buffer);

參數

buffer
Byte[]

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

傳回

收到的位元組數目。

例外狀況

buffernull

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

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

範例

下列程式代碼範例會在連接的 Socket上接收數據。

C#
// 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;
}

備註

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1

Receive(IList<ArraySegment<Byte>>, SocketFlags)

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

使用指定的 Socket,從已繫結的 SocketFlags 接收資料至接收緩衝區清單中。

C#
public int Receive (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags);

參數

buffers
IList<ArraySegment<Byte>>

ArraySegment<T> 型別的 Byte 清單,包含已接收的資料。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

傳回

收到的位元組數目。

例外狀況

buffersnull

-或-

buffers.Count 為零。

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

範例

下列程式代碼範例示範如何在連接的 Socket上接收數據。

C#

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

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1