Socket.Send Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Odesílá data do připojeného Socketzařízení .
Přetížení
Send(ReadOnlySpan<Byte>, SocketFlags, SocketError) |
Odešle data připojenému Socket pomocí zadaného SocketFlagsparametru . |
Send(ReadOnlySpan<Byte>) |
Odesílá data do připojeného Socketzařízení . |
Send(Byte[], Int32, Int32, SocketFlags, SocketError) |
Odešle zadaný počet bajtů dat připojenému Socket, počínaje zadaným posunem a pomocí zadaného SocketFlags. |
Send(IList<ArraySegment<Byte>>, SocketFlags, SocketError) |
Odešle sadu vyrovnávacích pamětí v seznamu připojenému Socketzařízení pomocí zadaného SocketFlags. |
Send(Byte[], Int32, Int32, SocketFlags) |
Odešle zadaný počet bajtů dat připojenému Socket, počínaje zadaným posunem a pomocí zadaného SocketFlags. |
Send(Byte[], Int32, SocketFlags) |
Odešle zadaný počet bajtů dat do připojeného Socketzařízení pomocí zadaného SocketFlags. |
Send(IList<ArraySegment<Byte>>) |
Odešle sadu vyrovnávacích pamětí v seznamu připojenému Socket. |
Send(IList<ArraySegment<Byte>>, SocketFlags) |
Odešle sadu vyrovnávacích pamětí v seznamu připojenému Socketzařízení pomocí zadaného SocketFlags. |
Send(Byte[], SocketFlags) |
Odešle data připojenému Socket pomocí zadaného SocketFlagsparametru . |
Send(ReadOnlySpan<Byte>, SocketFlags) |
Odešle data připojenému Socket pomocí zadaného SocketFlagsparametru . |
Send(Byte[]) |
Odesílá data do připojeného Socketzařízení . |
Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle data připojenému Socket pomocí zadaného SocketFlagsparametru .
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
Parametry
- buffer
- ReadOnlySpan<Byte>
Rozsah bajtů, který obsahuje data, která se mají odeslat.
- socketFlags
- SocketFlags
Bitové kombinace hodnot výčtu, která určuje chování při odesílání a příjmu.
- errorCode
- SocketError
Když tato metoda vrátí, obsahuje jednu z hodnot výčtu, která definuje kódy chyb pro soket.
Návraty
Počet bajtů odeslaných do Socket.
Výjimky
Při pokusu o přístup k soketu došlo k chybě.
Byl Socket zavřený.
Poznámky
Send synchronně odesílá data vzdálenému hostiteli zadanému Connect v metodě nebo Accept a vrátí počet bajtů, které byly úspěšně odeslány. Send lze použít pro protokoly orientované na připojení i bez připojení.
Toto přetížení vyžaduje vyrovnávací paměť obsahující data, která chcete odeslat. Výchozí SocketFlags hodnota je 0, vyrovnávací paměť se posune na 0 a počet bajtů pro odeslání výchozích hodnot na velikost vyrovnávací paměti.
Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect nebo Send vyvoláte SocketException. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect připojení ke vzdálenému hostiteli, nebo použít Accept k přijetí příchozího připojení.
Pokud používáte protokol bez připojení a plánujete odesílat data několika různým hostitelům, měli byste použít metodu SendTo . Pokud metodu SendTo nepoužíváte, budete muset volat Connect před každým voláním metody Send. Můžete použít SendTo i po vytvoření výchozího vzdáleného hostitele pomocí Connect. Výchozího vzdáleného hostitele můžete před voláním Send změnit také dalším voláním .Connect
Pokud používáte protokol orientovaný na připojení, bude blokovat, Send dokud nebudou odeslány všechny bajty ve vyrovnávací paměti, pokud nebyl nastavený časový limit pomocí Socket.SendTimeoutpříkazu . Pokud došlo k překročení hodnoty časového limitu Send , volání vyvolá SocketExceptionchybu . V režimu odblokování se může úspěšně dokončit i v případě, Send že odešle méně bajtů, než je počet bajtů ve vyrovnávací paměti. Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle bajty ve vyrovnávací paměti. Není také zaručeno, že se odesílaná data zobrazí v síti okamžitě. Za účelem zvýšení efektivity sítě může základní systém zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení Send metody znamená, že základní systém měl prostor pro ukládání dat do vyrovnávací paměti pro odeslání do sítě.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API windows Sockets verze 2 .
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Důležité
Úspěšné dokončení odeslání neznamená, že data byla úspěšně doručena. Pokud v rámci přenosového systému není k dispozici žádné místo vyrovnávací paměti pro uložení přenášených dat, bude odesílání blokovat, pokud soket není umístěn v režimu neblokování.
Viz také
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Platí pro
Send(ReadOnlySpan<Byte>)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odesílá data do připojeného Socketzařízení .
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
Parametry
- buffer
- ReadOnlySpan<Byte>
Rozsah bajtů, který obsahuje data, která se mají odeslat.
Návraty
Počet bajtů odeslaných do Socket.
Výjimky
Při pokusu o přístup k soketu došlo k chybě.
Byl Socket zavřený.
Poznámky
Send synchronně odesílá data vzdálenému hostiteli zadanému Connect v metodě nebo Accept a vrátí počet bajtů, které byly úspěšně odeslány. Send lze použít pro protokoly orientované na připojení i bez připojení.
Toto přetížení vyžaduje vyrovnávací paměť obsahující data, která chcete odeslat. Výchozí SocketFlags hodnota je 0, vyrovnávací paměť se posune na 0 a počet bajtů pro odeslání výchozích hodnot na velikost vyrovnávací paměti.
Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect nebo Send vyvoláte SocketException. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect připojení ke vzdálenému hostiteli, nebo použít Accept k přijetí příchozího připojení.
Pokud používáte protokol bez připojení a plánujete odesílat data několika různým hostitelům, měli byste použít metodu SendTo . Pokud metodu SendTo nepoužíváte, budete muset volat Connect před každým voláním metody Send. Můžete použít SendTo i po vytvoření výchozího vzdáleného hostitele pomocí Connect. Výchozího vzdáleného hostitele můžete před voláním Send změnit také dalším voláním .Connect
Pokud používáte protokol orientovaný na připojení, bude blokovat, Send dokud nebudou odeslány všechny bajty ve vyrovnávací paměti, pokud nebyl nastavený časový limit pomocí Socket.SendTimeoutpříkazu . Pokud došlo k překročení hodnoty časového limitu Send , volání vyvolá SocketExceptionchybu . V režimu odblokování se může úspěšně dokončit i v případě, Send že odešle méně bajtů, než je počet bajtů ve vyrovnávací paměti. Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle bajty ve vyrovnávací paměti. Není také zaručeno, že se odesílaná data zobrazí v síti okamžitě. Za účelem zvýšení efektivity sítě může základní systém zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení Send metody znamená, že základní systém měl prostor pro ukládání dat do vyrovnávací paměti pro odeslání do sítě.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API windows Sockets verze 2 .
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Důležité
Úspěšné dokončení odeslání neznamená, že data byla úspěšně doručena. Pokud v rámci přenosového systému není k dispozici žádné místo vyrovnávací paměti pro uložení přenášených dat, bude odesílání blokovat, pokud soket není umístěn v režimu neblokování.
Viz také
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Platí pro
Send(Byte[], Int32, Int32, SocketFlags, SocketError)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle zadaný počet bajtů dat připojenému Socket, počínaje zadaným posunem a pomocí zadaného 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
Parametry
- offset
- Int32
Pozice ve vyrovnávací paměti dat, ve které chcete začít odesílat data.
- size
- Int32
Počet bajtů k odeslání.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
- errorCode
- SocketError
Objekt SocketError , který ukládá chybu soketu.
Návraty
Počet bajtů odeslaných do Socket.
Výjimky
buffer
je null
.
offset
je menší než 0.
-nebo-
offset
je větší než délka .buffer
-nebo-
size
je menší než 0.
-nebo-
size
je větší než délka buffer
minus hodnota parametru offset
.
socketFlags
není platná kombinace hodnot.
-nebo-
Při přístupu k systému dojde k chybě operačního Socketsystému.
Byl Socket zavřený.
Příklady
Následující příklad kódu určuje vyrovnávací paměť dat, posun, velikost a SocketFlags pro odesílání dat do připojeného Socketobjektu .
// 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
Poznámky
Send synchronně odesílá data vzdálenému hostiteli zadanému v Connect metodě nebo Accept a vrátí počet bajtů, které byly úspěšně odeslány. Send lze použít pro protokoly orientované na připojení i bez připojení.
Pokud v tomto přetížení zadáte DontRoute příznak jako socketflags
parametr, nebudou odesílaná data směrována.
Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect nebo Send vyvolá SocketException. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect k navázání připojení ke vzdálenému hostiteli, nebo použít k Accept přijetí příchozího připojení.
Pokud používáte protokol bez připojení a plánujete odesílat data několika různým hostitelům, měli byste použít SendTo. Pokud nepoužíváte SendTo, budete muset před každým voláním Sendmetody volat Connect . Použití je v pořádku SendTo i po vytvoření výchozího vzdáleného hostitele s Connectnástrojem . Výchozího vzdáleného hostitele můžete před voláním Send změnit také dalším voláním .Connect
Musíte také zajistit, aby velikost nepřekračovala maximální velikost paketů příslušného poskytovatele služeb. Pokud ano, datagram se neodesílají a Send vyvolá .SocketException
Pokud používáte protokol orientovaný na připojení, Send bude nástroj blokovat, dokud nebude odeslán požadovaný počet bajtů, pokud nebyl časový limit nastaven pomocí Socket.SendTimeoutpříkazu . Pokud dojde k překročení hodnoty časového limitu Send , volání vyvolá SocketExceptionchybu . V režimu odblokování se může úspěšně dokončit i v případě, Send že odesílá menší počet bajtů, než kolik požadujete. Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle požadovaný počet bajtů. Není také zaručeno, že se odesílaná data objeví v síti okamžitě. Aby se zvýšila efektivita sítě, základní systém může zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení Send metody znamená, že podkladový systém měl prostor pro ukládání dat do vyrovnávací paměti pro síťové odesílání.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .
Poznámka
Úspěšné dokončení odeslání neznamená, že data byla úspěšně doručena. Pokud není v přenosovém systému k dispozici žádné místo ve vyrovnávací paměti pro uložení dat, která se mají přenést, bude odesílání blokováno, pokud soket není umístěn v režimu odblokování.
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Viz také
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Platí pro
Send(IList<ArraySegment<Byte>>, SocketFlags, SocketError)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle sadu vyrovnávacích pamětí v seznamu připojenému Socketzařízení pomocí zadaného 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
Parametry
- buffers
- IList<ArraySegment<Byte>>
Seznam ArraySegment<T>typu s Byte obsahující data, která se mají odeslat.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
- errorCode
- SocketError
Objekt SocketError , který ukládá chybu soketu.
Návraty
Počet bajtů odeslaných do Socket.
Výjimky
buffers
je null
.
buffers
je prázdné.
Při pokusu o přístup k soketu došlo k chybě.
Byla Socket uzavřena.
Poznámky
Toto přetížení vyžaduje alespoň jednu vyrovnávací paměť obsahující data, která chcete odeslat. Výchozí SocketFlags hodnota je 0. Pokud jako socketFlags
parametr zadáte DontRoute příznak, nebudou odesílaná data směrována.
Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect , nebo Send vyvolá SocketException. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect k navázání připojení ke vzdálenému hostiteli, nebo použít k Accept přijetí příchozího připojení.
Pokud používáte protokol bez připojení a plánujete odesílat data několika různým hostitelům, měli byste použít metodu SendTo . Pokud nepoužijete metodu SendTo , budete muset volat Connect před každým voláním metody Send. Můžete použít SendTo i po vytvoření výchozího vzdáleného hostitele pomocí Connectnástroje . Výchozího vzdáleného hostitele můžete před voláním Send změnit také dalším voláním .Connect
Pokud používáte protokol orientovaný na připojení, nástroj bude blokovat, Send dokud nebudou odeslány všechny bajty ve vyrovnávací paměti, pokud nebyl časový limit nastaven pomocí příkazu Socket.SendTimeout. Pokud dojde k překročení hodnoty časového limitu Send , volání vyvolá SocketExceptionchybu . V režimu neblokování se může úspěšně dokončit i v případě, Send že odešle méně bajtů, než je počet bajtů ve vyrovnávací paměti. Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle bajty ve vyrovnávací paměti. Není také zaručeno, že se odesílaná data objeví v síti okamžitě. Aby se zvýšila efektivita sítě, základní systém může zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení Send metody znamená, že podkladový systém měl prostor pro ukládání dat do vyrovnávací paměti pro síťové odesílání.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .
Poznámka
Úspěšné dokončení odeslání neznamená, že data byla úspěšně doručena. Pokud není v přenosovém systému k dispozici žádné místo ve vyrovnávací paměti pro uložení dat, která se mají přenést, bude odesílání blokováno, pokud soket není umístěn v režimu odblokování.
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Platí pro
Send(Byte[], Int32, Int32, SocketFlags)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle zadaný počet bajtů dat připojenému Socket, počínaje zadaným posunem a pomocí zadaného 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
Parametry
- offset
- Int32
Pozice ve vyrovnávací paměti dat, ve které chcete začít odesílat data.
- size
- Int32
Počet bajtů k odeslání.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
Návraty
Počet bajtů odeslaných do Socket.
Výjimky
buffer
je null
.
offset
je menší než 0.
-nebo-
offset
je větší než délka .buffer
-nebo-
size
je menší než 0.
-nebo-
size
je větší než délka parametru buffer
minus hodnota parametru offset
.
socketFlags
není platná kombinace hodnot.
-nebo-
Při přístupu k dojde k chybě operačního Socketsystému .
Byla Socket uzavřena.
Příklady
Následující příklad kódu určuje vyrovnávací paměť dat, posun, velikost a SocketFlags pro odesílání dat do připojeného 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
Poznámky
Send synchronně odesílá data vzdálenému hostiteli zadanému v Connect metodě nebo Accept a vrátí počet bajtů, které byly úspěšně odeslány. Send lze použít pro protokoly orientované na připojení i bez připojení.
Pokud v tomto přetížení zadáte DontRoute příznak jako socketflags
parametr, nebudou odesílaná data směrována.
Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect nebo Send vyvolá SocketException. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect k navázání připojení ke vzdálenému hostiteli, nebo použít k Accept přijetí příchozího připojení.
Pokud používáte protokol bez připojení a plánujete odesílat data několika různým hostitelům, měli byste použít SendTo. Pokud nepoužíváte SendTo, budete muset před každým voláním Sendmetody volat Connect . Použití je v pořádku SendTo i po vytvoření výchozího vzdáleného hostitele s Connectnástrojem . Výchozího vzdáleného hostitele můžete před voláním Send změnit také dalším voláním .Connect
Musíte také zajistit, aby velikost nepřekračovala maximální velikost paketů příslušného poskytovatele služeb. Pokud ano, datagram se neodesílají a Send vyvolá .SocketException
Pokud používáte protokol orientovaný na připojení, Send bude nástroj blokovat, dokud nebude odeslán požadovaný počet bajtů, pokud nebyl časový limit nastaven pomocí Socket.SendTimeoutpříkazu . Pokud dojde k překročení hodnoty časového limitu Send , volání vyvolá SocketExceptionchybu . V režimu odblokování se může úspěšně dokončit i v případě, Send že odesílá menší počet bajtů, než kolik požadujete. Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle požadovaný počet bajtů. Není také zaručeno, že se odesílaná data objeví v síti okamžitě. Aby se zvýšila efektivita sítě, základní systém může zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení Send metody znamená, že podkladový systém měl prostor pro ukládání dat do vyrovnávací paměti pro síťové odesílání.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .
Poznámka
Úspěšné dokončení odeslání neznamená, že data byla úspěšně doručena. Pokud není v přenosovém systému k dispozici žádné místo ve vyrovnávací paměti pro uložení dat, která se mají přenést, bude odesílání blokováno, pokud soket není umístěn v režimu odblokování.
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Viz také
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Platí pro
Send(Byte[], Int32, SocketFlags)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle zadaný počet bajtů dat připojenému Socketpomocí zadaného SocketFlagsparametru .
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
Parametry
- size
- Int32
Počet bajtů k odeslání.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
Návraty
Počet bajtů odeslaných do Socket.
Výjimky
buffer
je null
.
size
je menší než 0 nebo překračuje velikost vyrovnávací paměti.
socketFlags
není platná kombinace hodnot.
-nebo-
Při přístupu k soketu dojde k chybě operačního systému.
Byla Socket uzavřena.
Příklady
Následující příklad kódu odešle data nalezená ve vyrovnávací paměti a určuje None pro SocketFlags.
// 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
Poznámky
Send synchronně odesílá data vzdálenému hostiteli vytvořenému Connect v metodě nebo Accept a vrátí počet bajtů, které byly úspěšně odeslány. Send lze použít pro protokoly orientované na připojení i bez připojení.
Toto přetížení vyžaduje vyrovnávací paměť obsahující data, která chcete odeslat, počet bajtů, které chcete odeslat, a bitovou kombinaci libovolného SocketFlagsobjektu . Pokud jako socketflags
parametr zadáte DontRoute příznak, nebudou odesílaná data směrována.
Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect nebo Send vyvoláte SocketException. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect k navázání připojení ke vzdálenému hostiteli, nebo použít k Accept přijetí příchozího připojení.
Pokud používáte protokol bez připojení a plánujete odesílat data několika různým hostitelům, měli byste použít metodu .SendTo Pokud metodu SendTo nepoužíváte, budete muset metodu Connect volat před každým voláním Send metody. Můžete použít SendTo i po vytvoření výchozího vzdáleného hostitele s Connectnástrojem . Výchozího vzdáleného hostitele můžete před voláním Send změnit také dalším voláním .Connect
S protokolem orientovaným na připojení, bude blokovat, Send dokud není odeslán požadovaný počet bajtů, pokud nebyl časový limit nastaven pomocí .Socket.SendTimeout Pokud dojde k překročení hodnoty časového limitu Send , volání vyvolá SocketExceptionchybu . V režimu odblokování se může úspěšně dokončit i v případě, Send že odesílá menší počet bajtů, než kolik požadujete. Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle požadovaný počet bajtů. Není také zaručeno, že se odesílaná data objeví v síti okamžitě. Aby se zvýšila efektivita sítě, základní systém může zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení Send metody znamená, že podkladový systém měl prostor pro ukládání dat do vyrovnávací paměti pro síťové odesílání.
Poznámka
Musíte zajistit, aby velikost nepřekračovala maximální velikost paketů příslušného poskytovatele služeb. Pokud ano, datagram se neodesílal a Send vyvolá SocketException. Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Důležité
Úspěšné dokončení odeslání neznamená, že data byla úspěšně doručena. Pokud není v přenosovém systému k dispozici žádné místo ve vyrovnávací paměti pro uložení dat, která se mají přenést, bude odesílání blokováno, pokud soket není umístěn v režimu odblokování.
Viz také
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Platí pro
Send(IList<ArraySegment<Byte>>)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle sadu vyrovnávacích pamětí v seznamu připojenému 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
Parametry
- buffers
- IList<ArraySegment<Byte>>
Seznam ArraySegment<T>typu s Byte obsahující data, která se mají odeslat.
Návraty
Počet bajtů odeslaných do Socket.
Výjimky
buffers
je null
.
buffers
je prázdné.
Při pokusu o přístup k soketu došlo k chybě. Viz část s poznámkami níže.
Byla Socket uzavřena.
Poznámky
Send lze použít pro protokoly orientované na připojení i bez připojení.
Toto přetížení vyžaduje alespoň jednu vyrovnávací paměť obsahující data, která chcete odeslat.
Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect , nebo Send vyvolá SocketException. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect k navázání připojení ke vzdálenému hostiteli, nebo použít k Accept přijetí příchozího připojení.
Pokud používáte protokol bez připojení a plánujete odesílat data několika různým hostitelům, měli byste použít metodu SendTo . Pokud nepoužijete metodu SendTo , budete muset volat Connect před každým voláním metody Send. Můžete použít SendTo i po vytvoření výchozího vzdáleného hostitele pomocí Connectnástroje . Výchozího vzdáleného hostitele můžete před voláním Send změnit také dalším voláním .Connect
Pokud používáte protokol orientovaný na připojení, nástroj bude blokovat, Send dokud nebudou odeslány všechny bajty ve vyrovnávací paměti, pokud nebyl časový limit nastaven pomocí příkazu Socket.SendTimeout. Pokud dojde k překročení hodnoty časového limitu Send , volání vyvolá SocketExceptionchybu . V režimu odblokování se může úspěšně dokončit i v případě, Send že odešle méně bajtů, než je počet bajtů ve vyrovnávací paměti. Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle bajty ve vyrovnávací paměti. Není také zaručeno, že se odesílaná data objeví v síti okamžitě. Aby se zvýšila efektivita sítě, základní systém může zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení Send metody znamená, že podkladový systém měl prostor pro ukládání dat do vyrovnávací paměti pro síťové odesílání.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .
Poznámka
Úspěšné dokončení odeslání neznamená, že data byla úspěšně doručena. Pokud není v přenosovém systému k dispozici žádné místo ve vyrovnávací paměti pro uložení dat, která se mají přenést, bude odesílání blokováno, pokud soket není umístěn v režimu odblokování.
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Platí pro
Send(IList<ArraySegment<Byte>>, SocketFlags)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle sadu vyrovnávacích pamětí v seznamu připojenému Socketzařízení pomocí zadaného 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
Parametry
- buffers
- IList<ArraySegment<Byte>>
Seznam ArraySegment<T>typu s Byte obsahující data, která se mají odeslat.
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
Návraty
Počet bajtů odeslaných do Socket.
Výjimky
buffers
je null
.
buffers
je prázdné.
Při pokusu o přístup k soketu došlo k chybě.
Byla Socket uzavřena.
Poznámky
Toto přetížení vyžaduje alespoň jednu vyrovnávací paměť obsahující data, která chcete odeslat. Výchozí SocketFlags hodnota je 0. Pokud jako socketFlags
parametr zadáte DontRoute příznak, nebudou odesílaná data směrována.
Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect , nebo Send vyvolá SocketException. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect k navázání připojení ke vzdálenému hostiteli, nebo použít k Accept přijetí příchozího připojení.
Pokud používáte protokol bez připojení a plánujete odesílat data několika různým hostitelům, měli byste použít metodu SendTo . Pokud nepoužijete metodu SendTo , budete muset volat Connect před každým voláním metody Send. Můžete použít SendTo i po vytvoření výchozího vzdáleného hostitele pomocí Connectnástroje . Výchozího vzdáleného hostitele můžete před voláním Send změnit také dalším voláním .Connect
Pokud používáte protokol orientovaný na připojení, nástroj bude blokovat, Send dokud nebudou odeslány všechny bajty ve vyrovnávací paměti, pokud nebyl časový limit nastaven pomocí příkazu Socket.SendTimeout. Pokud dojde k překročení hodnoty časového limitu Send , volání vyvolá SocketExceptionchybu . V režimu neblokování se může úspěšně dokončit i v případě, Send že odešle méně bajtů, než je počet bajtů ve vyrovnávací paměti. Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle bajty ve vyrovnávací paměti. Není také zaručeno, že se odesílaná data objeví v síti okamžitě. Aby se zvýšila efektivita sítě, základní systém může zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení Send metody znamená, že podkladový systém měl prostor pro ukládání dat do vyrovnávací paměti pro síťové odesílání.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .
Poznámka
Úspěšné dokončení odeslání neznamená, že data byla úspěšně doručena. Pokud není v přenosovém systému k dispozici žádné místo ve vyrovnávací paměti pro uložení dat, která se mají přenést, bude odesílání blokováno, pokud soket není umístěn v režimu odblokování.
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Platí pro
Send(Byte[], SocketFlags)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle data připojenému Socket pomocí zadaného SocketFlagsparametru .
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
Parametry
- socketFlags
- SocketFlags
Bitové kombinace SocketFlags hodnot.
Návraty
Počet bajtů odeslaných do Socket.
Výjimky
buffer
je null
.
Při pokusu o přístup k soketu došlo k chybě.
Byla Socket uzavřena.
Příklady
Následující příklad kódu ukazuje odesílání dat v připojeném 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
Poznámky
Send synchronně odesílá data vzdálenému hostiteli vytvořenému Connect v metodě nebo Accept a vrátí počet bajtů, které byly úspěšně odeslány. Metodu Send lze použít pro protokoly orientované na připojení i bez připojení.
Toto přetížení vyžaduje vyrovnávací paměť obsahující data, která chcete odeslat, a bitovou kombinaci .SocketFlags Výchozí posun vyrovnávací paměti je 0 a výchozí počet bajtů k odeslání odpovídá velikosti vyrovnávací paměti. Pokud jako socketflags
hodnotu parametru DontRoute zadáte příznak, nebudou odesílaná data směrována.
Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect , nebo Send vyvolá SocketException. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect k navázání připojení ke vzdálenému hostiteli, nebo použít k Accept přijetí příchozího připojení.
Pokud používáte protokol bez připojení a plánujete odesílat data několika různým hostitelům, měli byste použít metodu SendTo . Pokud nepoužijete metodu SendTo , budete muset před každým voláním metody volat metodu ConnectSend. Můžete použít SendTo i po vytvoření výchozího vzdáleného hostitele pomocí Connectnástroje . Výchozího vzdáleného hostitele můžete před voláním Send změnit také dalším voláním .Connect
Pokud používáte protokol orientovaný na připojení, nástroj bude blokovat, Send dokud nebudou odeslány všechny bajty ve vyrovnávací paměti, pokud nebyl časový limit nastaven pomocí příkazu Socket.SendTimeout. Pokud dojde k překročení hodnoty časového limitu Send , volání vyvolá SocketExceptionchybu . V režimu odblokování se může úspěšně dokončit i v případě, Send že odešle méně bajtů, než je počet bajtů ve vyrovnávací paměti. Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle požadovaný počet bajtů. Není také zaručeno, že se odesílaná data objeví v síti okamžitě. Aby se zvýšila efektivita sítě, základní systém může zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení Send metody znamená, že podkladový systém měl prostor pro ukládání dat do vyrovnávací paměti pro síťové odesílání.
Poznámka
Musíte zajistit, aby velikost vyrovnávací paměti nepřekračovala maximální velikost paketů příslušného poskytovatele služeb. Pokud ano, datagram se neodesílají a Send vyvolá .SocketException Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .
Poznámka
Úspěšné dokončení odeslání neznamená, že data byla úspěšně doručena. Pokud není v přenosovém systému k dispozici žádné místo ve vyrovnávací paměti pro uložení dat, která se mají přenést, bude odesílání blokováno, pokud soket není umístěn v režimu odblokování.
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Viz také
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Platí pro
Send(ReadOnlySpan<Byte>, SocketFlags)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odešle data připojenému Socket pomocí zadaného SocketFlagsparametru .
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
Parametry
- buffer
- ReadOnlySpan<Byte>
Rozsah bajtů obsahující data, která mají být odeslána.
- socketFlags
- SocketFlags
Bitová kombinace hodnot výčtu, která určuje chování při odesílání a přijímání.
Návraty
Počet bajtů odeslaných do Socket.
Výjimky
Při pokusu o přístup k soketu došlo k chybě.
Byla Socket uzavřena.
Viz také
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Platí pro
Send(Byte[])
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
Odesílá data do připojeného Socketzařízení .
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
Parametry
Návraty
Počet bajtů odeslaných do Socket.
Výjimky
buffer
je null
.
Při pokusu o přístup k soketu došlo k chybě.
Byla Socket uzavřena.
Příklady
Následující příklad kódu ukazuje odesílání dat v připojeném 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
Poznámky
Send synchronně odesílá data vzdálenému hostiteli zadanému v Connect metodě nebo Accept a vrátí počet bajtů, které byly úspěšně odeslány. Send lze použít pro protokoly orientované na připojení i bez připojení.
Toto přetížení vyžaduje vyrovnávací paměť obsahující data, která chcete odeslat. Výchozí SocketFlags hodnota je 0, posun vyrovnávací paměti je ve výchozím nastavení 0 a počet bajtů k odeslání výchozí velikosti vyrovnávací paměti.
Pokud používáte protokol bez připojení, musíte před voláním této metody volat Connect , nebo Send vyvolá SocketException. Pokud používáte protokol orientovaný na připojení, musíte buď použít Connect k navázání připojení ke vzdálenému hostiteli, nebo použít k Accept přijetí příchozího připojení.
Pokud používáte protokol bez připojení a plánujete odesílat data několika různým hostitelům, měli byste použít metodu SendTo . Pokud nepoužijete metodu SendTo , budete muset volat Connect před každým voláním metody Send. Můžete použít SendTo i po vytvoření výchozího vzdáleného hostitele pomocí Connectnástroje . Výchozího vzdáleného hostitele můžete před voláním Send změnit také dalším voláním .Connect
Pokud používáte protokol orientovaný na připojení, nástroj bude blokovat, Send dokud nebudou odeslány všechny bajty ve vyrovnávací paměti, pokud nebyl časový limit nastaven pomocí příkazu Socket.SendTimeout. Pokud dojde k překročení hodnoty časového limitu Send , volání vyvolá SocketExceptionchybu . V režimu odblokování se může úspěšně dokončit i v případě, Send že odešle méně bajtů, než je počet bajtů ve vyrovnávací paměti. Je zodpovědností vaší aplikace sledovat počet odeslaných bajtů a opakovat operaci, dokud aplikace neodešle bajty ve vyrovnávací paměti. Není také zaručeno, že se odesílaná data objeví v síti okamžitě. Aby se zvýšila efektivita sítě, základní systém může zpozdit přenos, dokud se neshromáždí významné množství odchozích dat. Úspěšné dokončení Send metody znamená, že podkladový systém měl prostor pro ukládání dat do vyrovnávací paměti pro síťové odesílání.
Poznámka
Pokud se zobrazí SocketException, použijte SocketException.ErrorCode vlastnost k získání konkrétního kódu chyby. Jakmile tento kód získáte, projděte si podrobný popis chyby v dokumentaci k rozhraní API rozhraní Windows Sockets verze 2 .
Poznámka
Úspěšné dokončení odeslání neznamená, že data byla úspěšně doručena. Pokud není v přenosovém systému k dispozici žádné místo ve vyrovnávací paměti pro uložení dat, která se mají přenést, bude odesílání blokováno, pokud soket není umístěn v režimu odblokování.
Poznámka
Tento člen poskytuje trasovací informace, když je ve vaší aplikaci povoleno trasování sítě. Další informace najdete v tématu Trasování sítě v rozhraní .NET Framework.
Viz také
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)