Sdílet prostřednictvím


Socket.Send Metoda

Definice

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ě.

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é

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ě.

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é

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

buffer
Byte[]

Pole typu Byte obsahující data, která mají být odeslána.

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-

offsetje 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.

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é

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ě.

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

buffer
Byte[]

Pole typu Byte obsahující data, která mají být odeslána.

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-

offsetje 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 .

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é

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

buffer
Byte[]

Pole typu Byte obsahující data, která mají být odeslána.

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.

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é

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.

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ě.

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

buffer
Byte[]

Pole typu Byte obsahující data, která mají být odeslána.

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ě.

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é

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ě.

Viz také

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

buffer
Byte[]

Pole typu Byte obsahující data, která mají být odeslána.

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ě.

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é

Platí pro