Socket.Send 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
傳送資料至已連接的 Socket。
多載
Send(ReadOnlySpan<Byte>, SocketFlags, SocketError) |
使用指定的 Socket,傳送資料至已連接的 SocketFlags。 |
Send(ReadOnlySpan<Byte>) |
傳送資料至已連接的 Socket。 |
Send(Byte[], Int32, Int32, SocketFlags, SocketError) |
從指定位移開始,並使用指定的 SocketFlags,將資料的指定位元組數傳送到連接的 Socket。 |
Send(IList<ArraySegment<Byte>>, SocketFlags, SocketError) |
使用指定的 Socket,將清單中的緩衝區集合傳送至連接的 SocketFlags。 |
Send(Byte[], Int32, Int32, SocketFlags) |
從指定位移開始,並使用指定的 SocketFlags,將資料的指定位元組數傳送到連接的 Socket。 |
Send(Byte[], Int32, SocketFlags) |
使用指定的 Socket,傳送指定的資料位元組數至已連接的 SocketFlags。 |
Send(IList<ArraySegment<Byte>>) |
將清單中的緩衝區集合傳送至連接的 Socket。 |
Send(IList<ArraySegment<Byte>>, SocketFlags) |
使用指定的 Socket,將清單中的緩衝區集合傳送至連接的 SocketFlags。 |
Send(Byte[], SocketFlags) |
使用指定的 Socket,傳送資料至已連接的 SocketFlags。 |
Send(ReadOnlySpan<Byte>, SocketFlags) |
使用指定的 Socket,傳送資料至已連接的 SocketFlags。 |
Send(Byte[]) |
傳送資料至已連接的 Socket。 |
Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)
- 來源:
- Socket.cs
- 來源:
- Socket.cs
- 來源:
- Socket.cs
使用指定的 Socket,傳送資料至已連接的 SocketFlags。
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 的位元組數。
例外狀況
嘗試存取通訊端時發生錯誤。
備註
Send以同步方式將數據傳送至 或 Accept 方法中指定的Connect遠端主機,並傳回成功傳送的位元組數目。 Send 可用於連接導向和無連線通訊協定。
此多載需要包含您要傳送之數據的緩衝區。 此值 SocketFlags 預設值為0、緩衝區位移預設為0,以及要傳送的位元元組數目預設為緩衝區的大小。
如果您使用無連線通訊協定,則必須在呼叫此方法之前呼叫 Connect ,否則 Send 會擲回 SocketException。 如果您使用連線導向通訊協定,則必須使用 Connect 來建立遠端主機連線,或使用 Accept 來接受連入連線。
如果您使用無連線通訊協定,並計劃將數據傳送至數個不同的主機,您應該使用 SendTo 方法。 如果您沒有使用 SendTo 方法,則必須在每次呼叫 之前呼叫 ConnectSend。 即使您已使用 建立預設遠端主機Connect,也可以使用 SendTo 。 您也可以先變更預設遠端主機,再 Send 呼叫 Connect。
如果您使用連接導向通訊協定, Send 將會封鎖直到傳送緩衝區中的所有位元元組為止,除非已使用 Socket.SendTimeout設定逾時。 如果超過逾時值,呼叫 Send 將會擲回 SocketException。 在非封鎖模式中, Send 即使它傳送的位元元組數目小於緩衝區中的位元元數目,也可能順利完成。 您的應用程式必須追蹤傳送的位元組數目,並重試作業,直到應用程式在緩衝區中傳送位元組為止。 也不保證您傳送的數據會立即出現在網路上。 為了提升網路效率,基礎系統可能會延遲傳輸,直到收集大量的傳出數據為止。 方法成功完成 Send 表示基礎系統有空間可緩衝處理網路傳送的數據。
注意
如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
重要
順利完成傳送並不會指出已成功傳遞數據。 如果傳輸系統內沒有可用的緩衝區空間來保存要傳輸的數據,除非套接字已置於非封鎖模式,否則傳送將會封鎖。
另請參閱
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
適用於
Send(ReadOnlySpan<Byte>)
- 來源:
- 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 的位元組數。
例外狀況
嘗試存取通訊端時發生錯誤。
備註
Send以同步方式將數據傳送至 或 Accept 方法中指定的Connect遠端主機,並傳回成功傳送的位元組數目。 Send 可用於連接導向和無連線通訊協定。
此多載需要包含您要傳送之數據的緩衝區。 此值 SocketFlags 預設值為0、緩衝區位移預設為0,以及要傳送的位元元組數目預設為緩衝區的大小。
如果您使用無連線通訊協定,則必須在呼叫此方法之前呼叫 Connect ,否則 Send 會擲回 SocketException。 如果您使用連線導向通訊協定,則必須使用 Connect 來建立遠端主機連線,或使用 Accept 來接受連入連線。
如果您使用無連線通訊協定,並計劃將數據傳送至數個不同的主機,您應該使用 SendTo 方法。 如果您沒有使用 SendTo 方法,則必須在每次呼叫 之前呼叫 ConnectSend。 即使您已使用 建立預設遠端主機Connect,也可以使用 SendTo 。 您也可以先變更預設遠端主機,再 Send 呼叫 Connect。
如果您使用連接導向通訊協定, Send 將會封鎖直到傳送緩衝區中的所有位元元組為止,除非已使用 Socket.SendTimeout設定逾時。 如果超過逾時值,呼叫 Send 將會擲回 SocketException。 在非封鎖模式中, Send 即使它傳送的位元元組數目小於緩衝區中的位元元數目,也可能順利完成。 您的應用程式必須追蹤傳送的位元組數目,並重試作業,直到應用程式在緩衝區中傳送位元組為止。 也不保證您傳送的數據會立即出現在網路上。 為了提升網路效率,基礎系統可能會延遲傳輸,直到收集大量的傳出數據為止。 方法成功完成 Send 表示基礎系統有空間可緩衝處理網路傳送的數據。
注意
如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
重要
順利完成傳送並不會指出已成功傳遞數據。 如果傳輸系統內沒有可用的緩衝區空間來保存要傳輸的數據,除非套接字已置於非封鎖模式,否則傳送將會封鎖。
另請參閱
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
適用於
Send(Byte[], Int32, Int32, SocketFlags, SocketError)
- 來源:
- Socket.cs
- 來源:
- Socket.cs
- 來源:
- Socket.cs
從指定位移開始,並使用指定的 SocketFlags,將資料的指定位元組數傳送到連接的 Socket。
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
參數
- offset
- Int32
資料緩衝區中要開始傳送資料的位置。
- size
- Int32
要傳送的位元組數。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合。
- errorCode
- SocketError
SocketError 物件,儲存通訊端錯誤。
傳回
已傳送到 Socket 的位元組數。
例外狀況
buffer
為 null
。
offset
小於 0。
-或-
offset
大於 buffer
的長度。
-或-
size
小於 0。
-或-
size
大於 buffer
的長度減去 offset
參數的值。
範例
下列程式代碼範例會指定資料緩衝區、位移、大小,以及 SocketFlags 將資料傳送至連接的 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
備註
Send以同步方式將數據傳送至 或 Accept 方法中指定的Connect遠端主機,並傳回成功傳送的位元組數目。 Send 可用於連線導向和無連線通訊協定。
在此多載中,如果您將 DontRoute 旗標指定為 socketflags
參數,您傳送的數據將不會路由傳送。
如果您使用無連線通訊協定,您必須先呼叫 Connect ,才能呼叫這個方法,否則 Send 會擲回 SocketException。 如果您使用連線導向通訊協定,則必須使用 Connect 來建立遠端主機連線,或使用 Accept 來接受連入連線。
如果您使用無連線通訊協定,並計劃將資料傳送至數個不同的主機,您應該使用 SendTo。 如果您不使用 SendTo,則必須在每次呼叫 之前呼叫 ConnectSend。 SendTo即使您已使用 建立預設遠端主機Connect,也可以使用 。 您也可以在呼叫 Send 之前變更預設遠端主機,方法是對 進行另一個呼叫 Connect。
您也必須確定大小不會超過基礎服務提供者的封包大小上限。 如果這樣做,將不會傳送數據報,而且 Send 會擲回 SocketException。
如果您使用連接導向通訊協定, Send 將會封鎖直到傳送要求的位元元組數目為止,除非使用 Socket.SendTimeout設定逾時。 如果超過逾時值, Send 呼叫將會擲回 SocketException。 在非封鎖模式中,即使它傳送的位元元組數目小於您要求的位元元組數目, Send 也可能順利完成。 您的應用程式必須負責追蹤傳送的位元組數目,並重試作業,直到應用程式傳送要求的位元組數目為止。 也不保證您傳送的數據會立即出現在網路上。 為了提升網路效率,基礎系統可能會延遲傳輸,直到收集大量的傳出數據為止。 方法成功完成 Send 表示基礎系統有空間可緩衝處理網路傳送的數據。
注意
如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
成功完成傳送並不表示已成功傳遞數據。 如果傳輸系統內沒有可用的緩衝區空間來保存要傳輸的數據,除非套接字處於非封鎖模式,否則傳送將會封鎖。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
另請參閱
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
適用於
Send(IList<ArraySegment<Byte>>, SocketFlags, SocketError)
- 來源:
- 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>>
ArraySegment<T> 型別的 Byte 清單,其中包含要傳送的資料。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合。
- errorCode
- SocketError
SocketError 物件,儲存通訊端錯誤。
傳回
已傳送到 Socket 的位元組數。
例外狀況
buffers
為 null
。
buffers
是空的。
嘗試存取通訊端時發生錯誤。
備註
此多載至少需要一個緩衝區,其中包含您想要傳送的數據。 值 SocketFlags 預設值為 0。 如果您將 DontRoute 旗標指定為 socketFlags
參數,將不會路由傳送您傳送的數據。
如果您使用無連線通訊協定,則必須在呼叫此方法之前呼叫 Connect ,否則 Send 會擲回 SocketException。 如果您使用連線導向通訊協定,則必須使用 Connect 來建立遠端主機連線,或使用 Accept 來接受連入連線。
如果您使用無連線通訊協定,並計劃將數據傳送至數個不同的主機,您應該使用 SendTo 方法。 如果您未使用 SendTo 方法,則必須在每次呼叫 之前呼叫 ConnectSend。 即使您已使用 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
從指定位移開始,並使用指定的 SocketFlags,將資料的指定位元組數傳送到連接的 Socket。
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
參數
- offset
- Int32
資料緩衝區中要開始傳送資料的位置。
- size
- Int32
要傳送的位元組數。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合。
傳回
已傳送到 Socket 的位元組數。
例外狀況
buffer
為 null
。
offset
小於 0。
-或-
offset
大於 buffer
的長度。
-或-
size
小於 0。
-或-
size
大於 buffer
的長度減去 offset
參數的值。
範例
下列程式代碼範例會指定資料緩衝區、位移、大小,以及 SocketFlags 將資料傳送至連接的 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
備註
Send以同步方式將數據傳送至 或 Accept 方法中指定的Connect遠端主機,並傳回成功傳送的位元組數目。 Send 可用於連線導向和無連線通訊協定。
在此多載中,如果您將 DontRoute 旗標指定為 socketflags
參數,您傳送的數據將不會路由傳送。
如果您使用無連線通訊協定,您必須先呼叫 Connect ,才能呼叫這個方法,否則 Send 會擲回 SocketException。 如果您使用連線導向通訊協定,則必須使用 Connect 來建立遠端主機連線,或使用 Accept 來接受連入連線。
如果您使用無連線通訊協定,並計劃將資料傳送至數個不同的主機,您應該使用 SendTo。 如果您不使用 SendTo,則必須在每次呼叫 之前呼叫 ConnectSend。 SendTo即使您已使用 建立預設遠端主機Connect,也可以使用 。 您也可以在呼叫 Send 之前變更預設遠端主機,方法是對 進行另一個呼叫 Connect。
您也必須確定大小不會超過基礎服務提供者的封包大小上限。 如果這樣做,將不會傳送數據報,而且 Send 會擲回 SocketException。
如果您使用連接導向通訊協定, Send 將會封鎖直到傳送要求的位元元組數目為止,除非使用 Socket.SendTimeout設定逾時。 如果超過逾時值, Send 呼叫將會擲回 SocketException。 在非封鎖模式中,即使它傳送的位元元組數目小於您要求的位元元組數目, Send 也可能順利完成。 您的應用程式必須負責追蹤傳送的位元組數目,並重試作業,直到應用程式傳送要求的位元組數目為止。 也不保證您傳送的數據會立即出現在網路上。 為了提升網路效率,基礎系統可能會延遲傳輸,直到收集大量的傳出數據為止。 方法成功完成 Send 表示基礎系統有空間可緩衝處理網路傳送的數據。
注意
如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
成功完成傳送並不表示已成功傳遞數據。 如果傳輸系統內沒有可用的緩衝區空間來保存要傳輸的數據,除非套接字處於非封鎖模式,否則傳送將會封鎖。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
另請參閱
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
適用於
Send(Byte[], Int32, SocketFlags)
- 來源:
- 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
參數
- size
- Int32
要傳送的位元組數。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合。
傳回
已傳送到 Socket 的位元組數。
例外狀況
buffer
為 null
。
size
小於 0 或超過緩衝區的大小。
範例
下列程式代碼範例會傳送緩衝區中找到的數據,並針對 SocketFlags指定 None 。
// Displays sending with a connected socket
// using the overload that takes a buffer, message size, and socket flags.
int SendReceiveTest3( 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 i = server->Send( msg, msg->Length, SocketFlags::None );
Console::WriteLine( "Sent {0} bytes.", i.ToString() );
// Get reply from the server.
int byteCount = server->Receive( bytes, 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, 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以同步方式將數據傳送至 或 Accept 方法中建立的Connect遠端主機,並傳回成功傳送的位元組數目。 Send 可用於連線導向和無連線通訊協定。
此多載需要緩衝區,其中包含您想要傳送的數據、您要傳送的位元元組數目,以及任何 SocketFlags的位元組組合。 如果您將 DontRoute 旗標指定為 socketflags
參數,則不會路由傳送您傳送的數據。
如果您使用無連線通訊協定,您必須先呼叫 Connect ,才能呼叫此方法,否則 Send 會擲回 SocketException。 如果您使用連線導向通訊協定,則必須使用 Connect 來建立遠端主機連線,或使用 Accept 來接受連入連線。
如果您使用無連線通訊協定,並打算將數據傳送至數個不同的主機,您應該使用 SendTo 方法。 如果您未使用 SendTo 方法,則必須在每次呼叫 方法之前先呼叫 ConnectSend 方法。 即使在使用 建立預設遠端主機Connect之後,您仍可使用 SendTo 。 您也可以先變更預設遠端主機,再呼叫 Send 另一個 呼叫 Connect。
使用連線導向通訊協定時, Send 除非使用 Socket.SendTimeout設定逾時,否則會封鎖直到傳送要求的位元組數目為止。 如果超過逾時值, Send 呼叫將會擲回 SocketException。 在非封鎖模式中,即使它傳送的位元元組數目小於您要求的位元元組數目, Send 也可能順利完成。 您的應用程式必須負責追蹤傳送的位元組數目,並重試作業,直到應用程式傳送要求的位元組數目為止。 也不保證您傳送的數據會立即出現在網路上。 為了提升網路效率,基礎系統可能會延遲傳輸,直到收集大量的傳出數據為止。 方法成功完成 Send 表示基礎系統有空間可緩衝處理網路傳送的數據。
注意
您必須確定大小不會超過基礎服務提供者的封包大小上限。 如果這樣做,將不會傳送數據報,而且 Send 會擲回 SocketException。 如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
重要
成功完成傳送並不表示已成功傳遞數據。 如果傳輸系統內沒有可用的緩衝區空間來保存要傳輸的數據,除非套接字處於非封鎖模式,否則傳送將會封鎖。
另請參閱
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
適用於
Send(IList<ArraySegment<Byte>>)
- 來源:
- 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>>
ArraySegment<T> 型別的 Byte 清單,其中包含要傳送的資料。
傳回
已傳送到 Socket 的位元組數。
例外狀況
buffers
為 null
。
buffers
是空的。
嘗試存取通訊端時發生錯誤。 請參閱以下註解章節。
備註
Send 可用於連線導向和無連線通訊協定。
此多載至少需要一個緩衝區,其中包含您想要傳送的數據。
如果您使用無連線通訊協定,則必須在呼叫此方法之前呼叫 Connect ,否則 Send 會擲回 SocketException。 如果您使用連線導向通訊協定,則必須使用 Connect 來建立遠端主機連線,或使用 Accept 來接受連入連線。
如果您使用無連線通訊協定,並計劃將數據傳送至數個不同的主機,您應該使用 SendTo 方法。 如果您未使用 SendTo 方法,則必須在每次呼叫 之前呼叫 ConnectSend。 即使您已使用 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,將清單中的緩衝區集合傳送至連接的 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>>
ArraySegment<T> 型別的 Byte 清單,其中包含要傳送的資料。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合。
傳回
已傳送到 Socket 的位元組數。
例外狀況
buffers
為 null
。
buffers
是空的。
嘗試存取通訊端時發生錯誤。
備註
此多載至少需要一個緩衝區,其中包含您想要傳送的數據。 值 SocketFlags 預設值為 0。 如果您將 DontRoute 旗標指定為 socketFlags
參數,將不會路由傳送您傳送的數據。
如果您使用無連線通訊協定,則必須在呼叫此方法之前呼叫 Connect ,否則 Send 會擲回 SocketException。 如果您使用連線導向通訊協定,則必須使用 Connect 來建立遠端主機連線,或使用 Accept 來接受連入連線。
如果您使用無連線通訊協定,並計劃將數據傳送至數個不同的主機,您應該使用 SendTo 方法。 如果您未使用 SendTo 方法,則必須在每次呼叫 之前呼叫 ConnectSend。 即使您已使用 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,傳送資料至已連接的 SocketFlags。
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
參數
- socketFlags
- SocketFlags
SocketFlags 值的位元組合。
傳回
已傳送到 Socket 的位元組數。
例外狀況
buffer
為 null
。
嘗試存取通訊端時發生錯誤。
範例
下列程式代碼範例示範在連接的 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
備註
Send以同步方式將數據傳送至 在 或 Accept 方法中Connect建立的遠端主機,並傳回成功傳送的位元組數目。 方法 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 中的網路追蹤。
另請參閱
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
適用於
Send(ReadOnlySpan<Byte>, SocketFlags)
- 來源:
- Socket.cs
- 來源:
- Socket.cs
- 來源:
- Socket.cs
使用指定的 Socket,傳送資料至已連接的 SocketFlags。
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 的位元組數。
例外狀況
嘗試存取通訊端時發生錯誤。
另請參閱
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
適用於
Send(Byte[])
- 來源:
- 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
參數
傳回
已傳送到 Socket 的位元組數。
例外狀況
buffer
為 null
。
嘗試存取通訊端時發生錯誤。
範例
下列程式代碼範例示範在連接的 Socket上傳送數據。
// Displays sending with a connected socket
// using the overload that takes a buffer.
int SendReceiveTest1( Socket^ server )
{
array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
array<Byte>^ bytes = gcnew array<Byte>(256);
try
{
// Blocks until send returns.
int byteCount = server->Send( msg );
Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
// Get reply from the server.
byteCount = server->Receive( bytes );
if ( byteCount > 0 )
{
Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
}
}
catch ( SocketException^ e )
{
Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
return ( e->ErrorCode );
}
return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer.
public static int SendReceiveTest1(Socket server)
{
byte[] msg = Encoding.UTF8.GetBytes("This is a test");
byte[] bytes = new byte[256];
try
{
// Blocks until send returns.
int i = server.Send(msg);
Console.WriteLine("Sent {0} bytes.", i);
// Get reply from the server.
i = server.Receive(bytes);
Console.WriteLine(Encoding.UTF8.GetString(bytes));
}
catch (SocketException e)
{
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
return (e.ErrorCode);
}
return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer.
Public Shared Function SendReceiveTest1(ByVal server As Socket) As Integer
Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
Dim bytes(255) As Byte
Try
' Blocks until send returns.
Dim i As Integer = server.Send(msg)
Console.WriteLine("Sent {0} bytes.", i)
' Get reply from the server.
i = server.Receive(bytes)
Console.WriteLine(Encoding.UTF8.GetString(bytes))
Catch e As SocketException
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
Return e.ErrorCode
End Try
Return 0
End Function 'SendReceiveTest1
備註
Send以同步方式將數據傳送至 或 Accept 方法中指定的Connect遠端主機,並傳回成功傳送的位元組數目。 Send 可用於連接導向和無連線通訊協定。
此多載需要包含您要傳送之數據的緩衝區。 此值 SocketFlags 預設值為0、緩衝區位移預設為0,以及要傳送的位元元組數目預設為緩衝區的大小。
如果您使用無連線通訊協定,則必須在呼叫此方法之前呼叫 Connect ,否則 Send 會擲回 SocketException。 如果您使用連線導向通訊協定,則必須使用 Connect 來建立遠端主機連線,或使用 Accept 來接受連入連線。
如果您使用無連線通訊協定,並計劃將數據傳送至數個不同的主機,您應該使用 SendTo 方法。 如果您沒有使用 SendTo 方法,則必須在每次呼叫 之前呼叫 ConnectSend。 即使您已使用 建立預設遠端主機Connect,也可以使用 SendTo 。 您也可以在呼叫 Send 之前變更預設遠端主機,方法是對 進行另一個呼叫 Connect。
如果您使用連接導向通訊協定, Send 除非使用 Socket.SendTimeout設定逾時,否則會封鎖直到傳送緩衝區中的所有位元組為止。 如果超過逾時值,呼叫 Send 將會擲回 SocketException。 在非封鎖模式中, Send 即使它傳送的位元元組數目小於緩衝區中的位元元數目,也可能順利完成。 您的應用程式必須追蹤傳送的位元組數目,並重試作業,直到應用程式在緩衝區中傳送位元組為止。 也不保證您傳送的數據會立即出現在網路上。 為了提升網路效率,基礎系統可能會延遲傳輸,直到收集大量的傳出數據為止。 方法成功完成 Send 表示基礎系統有空間可緩衝處理網路傳送的數據。
注意
如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
順利完成傳送並不會指出已成功傳遞數據。 如果傳輸系統內沒有可用的緩衝區空間來保存要傳輸的數據,除非套接字已置於非封鎖模式,否則傳送將會封鎖。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
另請參閱
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)