共用方式為


Socket.Send 方法

定義

將資料傳送到已連接 Socket的 .

多載

名稱 Description
Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)

使用指定的 SocketFlags. 向連接Socket者傳送資料。

Send(ReadOnlySpan<Byte>)

將資料傳送到已連接 Socket的 .

Send(Byte[], Int32, Int32, SocketFlags, SocketError)

從指定的偏移量開始,將指定數量的資料傳送到連接 Socket的 ,並使用指定的 SocketFlags

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

將列表中的緩衝區集合傳送至連接 Socket的 ,使用指定的 SocketFlags

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

從指定的偏移量開始,將指定數量的資料傳送到連接 Socket的 ,並使用指定的 SocketFlags

Send(Byte[], Int32, SocketFlags)

使用指定的 ,將指定數量的資料傳送至連接 Socket的 ,使用指定的 SocketFlags

Send(IList<ArraySegment<Byte>>)

將列表中的緩衝區集合傳送到連接 Socket的 。

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

將列表中的緩衝區集合傳送至連接 Socket的 ,使用指定的 SocketFlags

Send(Byte[], SocketFlags)

使用指定的 SocketFlags. 向連接Socket者傳送資料。

Send(ReadOnlySpan<Byte>, SocketFlags)

使用指定的 SocketFlags. 向連接Socket者傳送資料。

Send(Byte[])

將資料傳送到已連接 Socket的 .

Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)

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

使用指定的 SocketFlags. 向連接Socket者傳送資料。

public:
 int Send(ReadOnlySpan<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Send(ReadOnlySpan<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Send : ReadOnlySpan<byte> * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Send (buffer As ReadOnlySpan(Of Byte), socketFlags As SocketFlags, ByRef errorCode As SocketError) As Integer

參數

buffer
ReadOnlySpan<Byte>

一個包含要傳送資料的位元組區段。

socketFlags
SocketFlags

一個位元組合的列舉值,指定發送與接收行為。

errorCode
SocketError

當此方法回傳時,包含定義套接字錯誤碼的列舉值之一。

傳回

傳送到.的 Socket位元組數。

例外狀況

嘗試存取該套接字時發生錯誤。

該店 Socket 已經關閉。

備註

Send同步傳送資料至 OR Accept 方法指定的Connect遠端主機,並回傳成功傳送的位元組數。 Send 可用於連線導向與無連線協定。

這種過載需要一個緩衝區來包含你想傳送的資料。 SocketFlags值預設為 0,緩衝區偏移量預設為 0,傳送的位元組數則預設為緩衝區大小。

如果你使用無連線協定,必須先呼叫 Connect 才能呼叫此方法,否則 Send 會拋出 SocketException。 如果你使用連線導向協定,必須用來 Connect 建立遠端主機連線,或用來 Accept 接受進來的連線。

如果你使用無連線協定,並計劃將資料傳送到多個不同的主機,建議採用此 SendTo 方法。 如果你不使用這個SendTo方法,你必須在每次呼叫 Send之前先呼叫Connect。 即使你已經建立了預設的遠端主機,你仍然可以使用SendToConnect 你也可以在呼叫 Send 前,透過再 Connect呼叫 來更改預設的遠端主機。

如果你使用的是面向連線的協定, Send 會阻塞直到緩衝區中所有位元組都傳送完畢,除非你用 Socket.SendTimeoutS 設定了逾時。 若逾時值超過, Send 呼叫將拋出 SocketException。 在非阻塞模式下, Send 即使傳送的位元組數少於緩衝區,也可能成功完成。 你的應用程式有責任追蹤傳送的位元組數,並重複操作直到應用程式將位元組送入緩衝區。 也無法保證你傳送的資料會立即出現在網路上。 為了提升網路效率,底層系統可能會延遲傳輸,直到收集大量外出資料。 成功完成 Send 此方法表示底層系統已有空間緩衝您的資料以便網路傳送。

備註

如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。 取得這些程式碼後,請參考 Windows Sockets 版本 2 的 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱 .NET Framework 中的網路追蹤

這很重要

成功完成傳送並不代表資料已成功送達。 如果傳輸系統內沒有緩衝區空間來存放要傳輸的資料,傳送會阻塞,除非套接字被設為非阻塞模式。

另請參閱

適用於

Send(ReadOnlySpan<Byte>)

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

將資料傳送到已連接 Socket的 .

public:
 int Send(ReadOnlySpan<System::Byte> buffer);
public int Send(ReadOnlySpan<byte> buffer);
member this.Send : ReadOnlySpan<byte> -> int
Public Function Send (buffer As ReadOnlySpan(Of Byte)) As Integer

參數

buffer
ReadOnlySpan<Byte>

一個包含要傳送資料的位元組區段。

傳回

傳送到.的 Socket位元組數。

例外狀況

嘗試存取該套接字時發生錯誤。

該店 Socket 已經關閉。

備註

Send同步傳送資料至 OR Accept 方法指定的Connect遠端主機,並回傳成功傳送的位元組數。 Send 可用於連線導向與無連線協定。

這種過載需要一個緩衝區來包含你想傳送的資料。 SocketFlags值預設為 0,緩衝區偏移量預設為 0,傳送的位元組數則預設為緩衝區大小。

如果你使用無連線協定,必須先呼叫 Connect 才能呼叫此方法,否則 Send 會拋出 SocketException。 如果你使用連線導向協定,必須用來 Connect 建立遠端主機連線,或用來 Accept 接受進來的連線。

如果你使用無連線協定,並計劃將資料傳送到多個不同的主機,建議採用此 SendTo 方法。 如果你不使用這個SendTo方法,你必須在每次呼叫 Send之前先呼叫Connect。 即使你已經建立了預設的遠端主機,也可以Connect使用 SendTo 。 你也可以在呼叫 Send 前,透過再 Connect呼叫 來更改預設的遠端主機。

如果你使用的是面向連線的協定, Send 會阻塞直到緩衝區中所有位元組都傳送完畢,除非你用 Socket.SendTimeoutS 設定了逾時。 若逾時值超過, Send 呼叫將拋出 SocketException。 在非阻塞模式下, Send 即使傳送的位元組數少於緩衝區,也可能成功完成。 你的應用程式有責任追蹤傳送的位元組數,並重複操作直到應用程式將位元組送入緩衝區。 也無法保證你傳送的資料會立即出現在網路上。 為了提升網路效率,底層系統可能會延遲傳輸,直到收集大量外出資料。 成功完成 Send 此方法表示底層系統已有空間緩衝您的資料以便網路傳送。

備註

如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱 .NET Framework 中的網路追蹤

這很重要

成功完成傳送並不代表資料已成功送達。 如果傳輸系統內沒有緩衝區空間來存放要傳輸的資料,傳送會阻塞,除非套接字被設為非阻塞模式。

另請參閱

適用於

Send(Byte[], Int32, Int32, SocketFlags, SocketError)

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

從指定的偏移量開始,將指定數量的資料傳送到連接 Socket的 ,並使用指定的 SocketFlags

public:
 int Send(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Send(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Send : byte[] * int * int * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Send (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef errorCode As SocketError) As Integer

參數

buffer
Byte[]

一個型別 Byte 為 的陣列,包含要傳送的資料。

offset
Int32

資料緩衝區中開始傳送資料的位置。

size
Int32

要傳送的位元組數。

socketFlags
SocketFlags

這是數值的位元組合 SocketFlags

errorCode
SocketError

一個 SocketError 儲存套接字錯誤的物件。

傳回

傳送到.的 Socket位元組數。

例外狀況

buffernull

offset 小於0。

-或-

offset 大於 的 buffer長度。

-或-

size 小於0。

-或-

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

socketFlags 不是有效的數值組合。

-或-

在存取 Socket.

該店 Socket 已經關閉。

範例

以下程式碼範例指定資料緩衝區、偏移量、大小,以及 SocketFlags 用於將資料傳送至連接 Socket的 。

// 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

備註

Send同步傳送資料至 OR Accept 方法指定的Connect遠端主機,並回傳成功傳送的位元組數。 Send 可用於連線導向與無連線協定。

在此過載時,若你指定 DontRoute 旗標為 socketflags 參數,所傳送的資料將不會被路由。

如果你使用無連接協定,必須先呼叫 Connect 此方法,否則 Send 會拋出 SocketException。 如果你使用的是連線導向協定,必須用來 Connect 建立遠端主機連線,或用來 Accept 接受進來的連線。

如果你使用無連線協定並計劃將資料傳送到多個不同的主機,你應該使用 SendTo。 如果你不使用 SendTo,你必須在每次呼叫 Send之前先打電話Connect。 即使你已經建立了預設的遠端主機,也可以Connect繼續使用SendTo。 你也可以在呼叫 Send 前,透過再 Connect呼叫 來更改預設的遠端主機。

你也必須確保封包大小不超過底層服務提供者的最大封包大小。 如果有,資料報就不會被傳送,而是 Send 會拋出 SocketException

如果你使用連線導向協定, Send 會阻塞直到傳送所需位元組數,除非使用 Socket.SendTimeout時設定了逾時。 若逾時值超過, Send 呼叫將拋出 SocketException。 在非阻塞模式下, Send 即使傳送的位元組數少於你請求的位元組數,也可能成功完成。 你的應用程式負責追蹤傳送的位元組數,並重複嘗試操作直到應用程式傳送所需的位元組數。 也無法保證你傳送的資料會立即出現在網路上。 為了提升網路效率,底層系統可能會延遲傳輸,直到收集大量外出資料。 成功完成 Send 此方法表示底層系統已有空間緩衝您的資料以便網路傳送。

備註

如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

備註

成功完成傳送並不代表資料已成功送達。 如果傳輸系統內沒有緩衝區空間來存放要傳輸的資料,傳送會阻塞,除非套接字被設為非阻塞模式。

備註

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於

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

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

將列表中的緩衝區集合傳送至連接 Socket的 ,使用指定的 SocketFlags

public:
 int Send(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Send(System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Send : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Send (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags, ByRef errorCode As SocketError) As Integer

參數

buffers
IList<ArraySegment<Byte>>

一個包含要傳送資料的 s Byte 類型清單ArraySegment<T>

socketFlags
SocketFlags

這是數值的位元組合 SocketFlags

errorCode
SocketError

一個 SocketError 儲存套接字錯誤的物件。

傳回

傳送到.的 Socket位元組數。

例外狀況

buffersnull

buffers 空無一人。

嘗試存取該套接字時發生錯誤。

該店 Socket 已經關閉。

備註

這種過載需要至少有一個緩衝區,裡面有你想傳送的資料。 SocketFlags該值預設為 0。 如果你指定旗 DontRoute 標作為 socketFlags 參數,你傳送的資料就不會被路由。

如果你使用無連接協定,必須先呼叫 Connect 此方法,否則 Send 會拋出 SocketException。 如果你使用的是連線導向協定,必須用來 Connect 建立遠端主機連線,或用來 Accept 接受進來的連線。

如果你使用無連線協定,並計劃將資料傳送到多個不同的主機,建議使用這種 SendTo 方法。 若不使用此SendTo方法,則必須在每次呼叫前Send先呼叫Connect。 即使你已經建立了預設的遠端主機,也可以Connect使用 SendTo 。 你也可以在呼叫 Send 前,透過再 Connect呼叫 來更改預設的遠端主機。

如果你使用連線導向協定, Send 會阻塞直到緩衝區中所有位元組都傳送完畢,除非使用了 Socket.SendTimeout。 若逾時值超過, Send 呼叫將拋出 SocketException。 在非阻塞模式下, Send 即使傳送的位元組數少於緩衝區,也可能成功完成。 你的應用程式有責任追蹤傳送的位元組數,並重複操作直到應用程式將位元組送入緩衝區。 也無法保證你傳送的資料會立即出現在網路上。 為了提升網路效率,底層系統可能會延遲傳輸,直到收集大量外出資料。 成功完成 Send 此方法表示底層系統已有空間緩衝您的資料以便網路傳送。

備註

如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

備註

成功完成傳送並不代表資料已成功送達。 如果傳輸系統內沒有緩衝區空間來存放要傳輸的資料,傳送會阻塞,除非套接字被設為非阻塞模式。

備註

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱 .NET Framework 中的網路追蹤

適用於

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

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

從指定的偏移量開始,將指定數量的資料傳送到連接 Socket的 ,並使用指定的 SocketFlags

public:
 int Send(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags);
public int Send(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags);
member this.Send : byte[] * int * int * System.Net.Sockets.SocketFlags -> int
Public Function Send (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags) As Integer

參數

buffer
Byte[]

一個型別 Byte 為 的陣列,包含要傳送的資料。

offset
Int32

資料緩衝區中開始傳送資料的位置。

size
Int32

要傳送的位元組數。

socketFlags
SocketFlags

這是數值的位元組合 SocketFlags

傳回

傳送到.的 Socket位元組數。

例外狀況

buffernull

offset 小於0。

-或-

offset 大於 的 buffer長度。

-或-

size 小於0。

-或-

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

socketFlags 不是有效的數值組合。

-或-

在存取 Socket.

該店 Socket 已經關閉。

範例

以下程式碼範例指定資料緩衝區、偏移量、大小,以及 SocketFlags 用於將資料傳送至連接 Socket的 。

// 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

備註

Send同步傳送資料至 OR Accept 方法指定的Connect遠端主機,並回傳成功傳送的位元組數。 Send 可用於連線導向與無連線協定。

在此過載時,若你指定 DontRoute 旗標為 socketflags 參數,所傳送的資料將不會被路由。

如果你使用無連接協定,必須先呼叫 Connect 此方法,否則 Send 會拋出 SocketException。 如果你使用的是連線導向協定,必須用來 Connect 建立遠端主機連線,或用來 Accept 接受進來的連線。

如果你使用無連線協定並計劃將資料傳送到多個不同的主機,你應該使用 SendTo。 如果你不使用 SendTo,你必須在每次呼叫 Send之前先打電話Connect。 即使你已經建立了預設的遠端主機,也可以Connect繼續使用SendTo。 你也可以在呼叫 Send 前,透過再 Connect呼叫 來更改預設的遠端主機。

你也必須確保封包大小不超過底層服務提供者的最大封包大小。 如果有,資料報就不會被傳送,而是 Send 會拋出 SocketException

如果你使用連線導向協定, Send 會阻塞直到傳送所需位元組數,除非使用 Socket.SendTimeout時設定了逾時。 若逾時值超過, Send 呼叫將拋出 SocketException。 在非阻塞模式下, Send 即使傳送的位元組數少於你請求的位元組數,也可能成功完成。 你的應用程式負責追蹤傳送的位元組數,並重複嘗試操作直到應用程式傳送所需的位元組數。 也無法保證你傳送的資料會立即出現在網路上。 為了提升網路效率,底層系統可能會延遲傳輸,直到收集大量外出資料。 成功完成 Send 此方法表示底層系統已有空間緩衝您的資料以便網路傳送。

備註

如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

備註

成功完成傳送並不代表資料已成功送達。 如果傳輸系統內沒有緩衝區空間來存放要傳輸的資料,傳送會阻塞,除非套接字被設為非阻塞模式。

備註

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於

Send(Byte[], Int32, SocketFlags)

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

使用指定的 ,將指定數量的資料傳送至連接 Socket的 ,使用指定的 SocketFlags

public:
 int Send(cli::array <System::Byte> ^ buffer, int size, System::Net::Sockets::SocketFlags socketFlags);
public int Send(byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags);
member this.Send : byte[] * int * System.Net.Sockets.SocketFlags -> int
Public Function Send (buffer As Byte(), size As Integer, socketFlags As SocketFlags) As Integer

參數

buffer
Byte[]

一個型別 Byte 為 的陣列,包含要傳送的資料。

size
Int32

要傳送的位元組數。

socketFlags
SocketFlags

這是數值的位元組合 SocketFlags

傳回

傳送到.的 Socket位元組數。

例外狀況

buffernull

size 小於 0 或超過緩衝區大小。

socketFlags 不是有效的數值組合。

-或-

存取該套接字時會發生作業系統錯誤。

該店 Socket 已經關閉。

範例

以下程式碼範例傳送緩衝區中的資料,並指定 NoneSocketFlags

// Displays sending with a connected socket
// using the overload that takes a buffer, message size, and socket flags.
public static int SendReceiveTest3(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, msg.Length, SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", i);

        // Get reply from the server.
        int byteCount = server.Receive(bytes, 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, message size, and socket flags.
Public Shared Function SendReceiveTest3(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, msg.Length, SocketFlags.None)
        Console.WriteLine("Sent {0} bytes.", i)
        
        ' Get reply from the server.
        Dim byteCount As Integer = server.Receive(bytes, 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 'SendReceiveTest3

備註

Send 同步傳送資料至以 Connect OR Accept 方法建立的遠端主機,並回傳成功傳送的位元組數。 Send 可用於連線導向與無連線協定。

這種超載需要一個緩衝區,包含你想傳送的資料、你想傳送的位元組數,以及任意 SocketFlags的位元組合。 如果你指定 DontRoute 旗標作為 socketflags 參數,你傳送的資料就不會被路由。

如果你使用無連線協定,必須先呼叫 Connect 才能呼叫此方法,否則 Send 會拋出 SocketException。 如果你使用連線導向協定,必須用來 Connect 建立遠端主機連線,或用來 Accept 接受進來的連線。

如果你使用無連線協定,並計劃將資料傳送到多個不同的主機,建議採用此 SendTo 方法。 如果你不使用該SendTo方法,你必須在每次呼叫Send前先呼叫該Connect方法。 即使你已經建立了預設的遠端主機,你仍然可以使用SendToConnect 你也可以在呼叫 Send 前,透過再 Connect呼叫 來更改預設的遠端主機。

對於連線導向協定,會 Send 阻塞直到傳送所需位元組數,除非透過使用 Socket.SendTimeout設定逾時。 若逾時值超過, Send 呼叫將拋出 SocketException。 在非阻塞模式下, Send 即使傳送的位元組數少於你請求的位元組數,也可能成功完成。 你的應用程式負責追蹤傳送的位元組數,並重複嘗試操作直到應用程式傳送所需的位元組數。 也無法保證你傳送的資料會立即出現在網路上。 為了提升網路效率,底層系統可能會延遲傳輸,直到收集大量外出資料。 成功完成 Send 此方法表示底層系統已有空間緩衝您的資料以便網路傳送。

備註

您必須確保封包大小不超過底層服務提供者的最大封包大小。 如果有,資料報就不會被傳送,而是 Send 會拋出 SocketException。 如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱 .NET Framework 中的網路追蹤

這很重要

成功完成傳送並不代表資料已成功送達。 如果傳輸系統內沒有緩衝區空間來存放要傳輸的資料,傳送會阻塞,除非套接字被設為非阻塞模式。

另請參閱

適用於

Send(IList<ArraySegment<Byte>>)

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

將列表中的緩衝區集合傳送到連接 Socket的 。

public:
 int Send(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers);
public int Send(System.Collections.Generic.IList<ArraySegment<byte>> buffers);
member this.Send : System.Collections.Generic.IList<ArraySegment<byte>> -> int
Public Function Send (buffers As IList(Of ArraySegment(Of Byte))) As Integer

參數

buffers
IList<ArraySegment<Byte>>

一個包含要傳送資料的 s Byte 類型清單ArraySegment<T>

傳回

傳送到.的 Socket位元組數。

例外狀況

buffersnull

buffers 空無一人。

嘗試存取該套接字時發生錯誤。 詳見下方備註區。

該店 Socket 已經關閉。

備註

Send 可用於連線導向與無連線協定。

這種過載需要至少有一個緩衝區,裡面有你想傳送的資料。

如果你使用無連接協定,必須先呼叫 Connect 此方法,否則 Send 會拋出 SocketException。 如果你使用的是連線導向協定,必須用來 Connect 建立遠端主機連線,或用來 Accept 接受進來的連線。

如果你使用無連線協定,並計劃將資料傳送到多個不同的主機,建議使用這種 SendTo 方法。 若不使用此SendTo方法,則必須在每次呼叫前Send先呼叫Connect。 即使你已經建立了預設的遠端主機,也可以Connect使用 SendTo 。 你也可以在呼叫 Send 前,透過再 Connect呼叫 來更改預設的遠端主機。

如果你使用連線導向協定, Send 會阻塞直到緩衝區中所有位元組都傳送完畢,除非使用了 Socket.SendTimeout。 若逾時值超過, Send 呼叫將拋出 SocketException。 在非阻塞模式下, Send 即使傳送的位元組數少於緩衝區,也可能成功完成。 你的應用程式有責任追蹤傳送的位元組數,並重複操作直到應用程式將位元組送入緩衝區。 也無法保證你傳送的資料會立即出現在網路上。 為了提升網路效率,底層系統可能會延遲傳輸,直到收集大量外出資料。 成功完成 Send 此方法表示底層系統已有空間緩衝您的資料以便網路傳送。

備註

如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

備註

成功完成傳送並不代表資料已成功送達。 如果傳輸系統內沒有緩衝區空間來存放要傳輸的資料,傳送會阻塞,除非套接字被設為非阻塞模式。

備註

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱 .NET Framework 中的網路追蹤

適用於

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

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

將列表中的緩衝區集合傳送至連接 Socket的 ,使用指定的 SocketFlags

public:
 int Send(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags);
public int Send(System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags);
member this.Send : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags -> int
Public Function Send (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags) As Integer

參數

buffers
IList<ArraySegment<Byte>>

一個包含要傳送資料的 s Byte 類型清單ArraySegment<T>

socketFlags
SocketFlags

這是數值的位元組合 SocketFlags

傳回

傳送到.的 Socket位元組數。

例外狀況

buffersnull

buffers 空無一人。

嘗試存取該套接字時發生錯誤。

該店 Socket 已經關閉。

備註

這種過載需要至少有一個緩衝區,裡面有你想傳送的資料。 SocketFlags該值預設為 0。 如果你指定旗 DontRoute 標作為 socketFlags 參數,你傳送的資料就不會被路由。

如果你使用無連接協定,必須先呼叫 Connect 此方法,否則 Send 會拋出 SocketException。 如果你使用的是連線導向協定,必須用來 Connect 建立遠端主機連線,或用來 Accept 接受進來的連線。

如果你使用無連線協定,並計劃將資料傳送到多個不同的主機,建議使用這種 SendTo 方法。 若不使用此SendTo方法,則必須在每次呼叫前Send先呼叫Connect。 即使你已經建立了預設的遠端主機,也可以Connect使用 SendTo 。 你也可以在呼叫 Send 前,透過再 Connect呼叫 來更改預設的遠端主機。

如果你使用連線導向協定, Send 會阻塞直到緩衝區中所有位元組都傳送完畢,除非使用了 Socket.SendTimeout。 若逾時值超過, Send 呼叫將拋出 SocketException。 在非阻塞模式下, Send 即使傳送的位元組數少於緩衝區,也可能成功完成。 你的應用程式有責任追蹤傳送的位元組數,並重複操作直到應用程式將位元組送入緩衝區。 也無法保證你傳送的資料會立即出現在網路上。 為了提升網路效率,底層系統可能會延遲傳輸,直到收集大量外出資料。 成功完成 Send 此方法表示底層系統已有空間緩衝您的資料以便網路傳送。

備註

如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

備註

成功完成傳送並不代表資料已成功送達。 如果傳輸系統內沒有緩衝區空間來存放要傳輸的資料,傳送會阻塞,除非套接字被設為非阻塞模式。

備註

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱 .NET Framework 中的網路追蹤

適用於

Send(Byte[], SocketFlags)

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

使用指定的 SocketFlags. 向連接Socket者傳送資料。

public:
 int Send(cli::array <System::Byte> ^ buffer, System::Net::Sockets::SocketFlags socketFlags);
public int Send(byte[] buffer, System.Net.Sockets.SocketFlags socketFlags);
member this.Send : byte[] * System.Net.Sockets.SocketFlags -> int
Public Function Send (buffer As Byte(), socketFlags As SocketFlags) As Integer

參數

buffer
Byte[]

一個型別 Byte 為 的陣列,包含要傳送的資料。

socketFlags
SocketFlags

這是數值的位元組合 SocketFlags

傳回

傳送到.的 Socket位元組數。

例外狀況

buffernull

嘗試存取該套接字時發生錯誤。

該店 Socket 已經關閉。

範例

以下程式碼範例示範在連接 Socket的 。

// 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

備註

Send 同步傳送資料至以 Connect OR Accept 方法建立的遠端主機,並回傳成功傳送的位元組數。 此 Send 方法可用於連線導向及無連線協定。

這種過載需要一個緩衝區,裡面包含你想傳送的資料,並且有 的位元組合 SocketFlags。 緩衝區偏移量預設為 0,傳送的位元組數則預設為緩衝區大小。 如果你指定 DontRoute 旗標作為 socketflags 參數值,你傳送的資料就不會被路由。

如果你使用無連接協定,必須先呼叫 Connect 此方法,否則 Send 會拋出 SocketException。 如果你使用的是連線導向協定,必須用來 Connect 建立遠端主機連線,或用來 Accept 接受進來的連線。

如果你使用無連線協定,並計劃將資料傳送到多個不同的主機,建議使用這種 SendTo 方法。 如果你不使用該SendTo方法,必須在每次呼叫 之前Send先呼叫該Connect方法。 即使你已經建立了預設的遠端主機,也可以Connect使用 SendTo 。 你也可以在呼叫 Send 前,透過再 Connect呼叫 來更改預設的遠端主機。

如果你使用連線導向協定, Send 會阻塞直到緩衝區中所有位元組都傳送完畢,除非使用了 Socket.SendTimeout。 若逾時值超過, Send 呼叫將拋出 SocketException。 在非阻塞模式下, Send 即使傳送的位元組數少於緩衝區,也可能成功完成。 你的應用程式負責追蹤傳送的位元組數,並重複嘗試操作直到應用程式傳送所需的位元組數。 也無法保證你傳送的資料會立即出現在網路上。 為了提升網路效率,底層系統可能會延遲傳輸,直到收集大量外出資料。 成功完成 Send 此方法表示底層系統已有空間緩衝您的資料以便網路傳送。

備註

您必須確保緩衝區大小不超過底層服務提供者的最大封包大小。 如果有,資料報就不會被傳送,而是 Send 會拋出 SocketException。 如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

備註

成功完成傳送並不代表資料已成功送達。 如果傳輸系統內沒有緩衝區空間來存放要傳輸的資料,傳送會阻塞,除非套接字被設為非阻塞模式。

備註

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於

Send(ReadOnlySpan<Byte>, SocketFlags)

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

使用指定的 SocketFlags. 向連接Socket者傳送資料。

public:
 int Send(ReadOnlySpan<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags);
public int Send(ReadOnlySpan<byte> buffer, System.Net.Sockets.SocketFlags socketFlags);
member this.Send : ReadOnlySpan<byte> * System.Net.Sockets.SocketFlags -> int
Public Function Send (buffer As ReadOnlySpan(Of Byte), socketFlags As SocketFlags) As Integer

參數

buffer
ReadOnlySpan<Byte>

一個包含要傳送資料的位元組區段。

socketFlags
SocketFlags

一個位元組合的列舉值,指定發送與接收行為。

傳回

傳送到.的 Socket位元組數。

例外狀況

嘗試存取該套接字時發生錯誤。

該店 Socket 已經關閉。

另請參閱

適用於

Send(Byte[])

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

將資料傳送到已連接 Socket的 .

public:
 int Send(cli::array <System::Byte> ^ buffer);
public int Send(byte[] buffer);
member this.Send : byte[] -> int
Public Function Send (buffer As Byte()) As Integer

參數

buffer
Byte[]

一個型別 Byte 為 的陣列,包含要傳送的資料。

傳回

傳送到.的 Socket位元組數。

例外狀況

buffernull

嘗試存取該套接字時發生錯誤。

該店 Socket 已經關閉。

範例

以下程式碼範例示範在連接 Socket的 。

// 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

備註

Send同步傳送資料至 OR Accept 方法指定的Connect遠端主機,並回傳成功傳送的位元組數。 Send 可用於連線導向與無連線協定。

這種過載需要一個緩衝區來包含你想傳送的資料。 SocketFlags值預設為 0,緩衝區偏移量預設為 0,傳送的位元組數則預設為緩衝區大小。

如果你使用無連接協定,必須先呼叫 Connect 此方法,否則 Send 會拋出 SocketException。 如果你使用的是連線導向協定,必須用來 Connect 建立遠端主機連線,或用來 Accept 接受進來的連線。

如果你使用無連線協定,並計劃將資料傳送到多個不同的主機,建議使用這種 SendTo 方法。 若不使用此SendTo方法,則必須在每次呼叫前Send先呼叫Connect。 即使你已經建立了預設的遠端主機,也可以Connect使用 SendTo 。 你也可以在呼叫 Send 前,透過再 Connect呼叫 來更改預設的遠端主機。

如果你使用連線導向協定, Send 會阻塞直到緩衝區中所有位元組都傳送完畢,除非使用了 Socket.SendTimeout。 若逾時值超過, Send 呼叫將拋出 SocketException。 在非阻塞模式下, Send 即使傳送的位元組數少於緩衝區,也可能成功完成。 你的應用程式有責任追蹤傳送的位元組數,並重複操作直到應用程式將位元組送入緩衝區。 也無法保證你傳送的資料會立即出現在網路上。 為了提升網路效率,底層系統可能會延遲傳輸,直到收集大量外出資料。 成功完成 Send 此方法表示底層系統已有空間緩衝您的資料以便網路傳送。

備註

如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。 取得此程式碼後,請參閱 Windows Sockets 版本 2 API 錯誤代碼 文件,以獲得錯誤的詳細說明。

備註

成功完成傳送並不代表資料已成功送達。 如果傳輸系統內沒有緩衝區空間來存放要傳輸的資料,傳送會阻塞,除非套接字被設為非阻塞模式。

備註

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱 .NET Framework 中的網路追蹤

另請參閱

適用於