Socket.Send Metoda

Definicja

Wysyła dane do połączonego Socket.

Przeciążenia

Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)

Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu .

Send(ReadOnlySpan<Byte>)

Wysyła dane do połączonego Socket.

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

Wysyła określoną liczbę bajtów danych do połączonego Socket, zaczynając od określonego przesunięcia i używając określonego SocketFlags.

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

Wysyła zestaw buforów na liście do połączonego Socketelementu , przy użyciu określonego SocketFlagselementu .

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

Wysyła określoną liczbę bajtów danych do połączonego Socket, zaczynając od określonego przesunięcia i używając określonego SocketFlags.

Send(Byte[], Int32, SocketFlags)

Wysyła określoną liczbę bajtów danych do połączonego Socketobiektu przy użyciu określonego SocketFlagselementu .

Send(IList<ArraySegment<Byte>>)

Wysyła zestaw buforów na liście do połączonego Socketelementu .

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

Wysyła zestaw buforów na liście do połączonego Socketelementu , przy użyciu określonego SocketFlagselementu .

Send(Byte[], SocketFlags)

Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu .

Send(ReadOnlySpan<Byte>, SocketFlags)

Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu .

Send(Byte[])

Wysyła dane do połączonego Socket.

Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu .

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>

Zakres bajtów, który zawiera dane do wysłania.

socketFlags
SocketFlags

Bitowa kombinacja wartości wyliczenia, która określa zachowania wysyłania i odbierania.

errorCode
SocketError

Gdy ta metoda zostanie zwrócona, zawiera jedną z wartości wyliczenia, która definiuje kody błędów dla gniazda.

Zwraca

Liczba bajtów wysłanych do obiektu Socket.

Wyjątki

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Uwagi

Send synchronicznie wysyła dane do hosta zdalnego określonego w Connect metodzie or Accept i zwraca liczbę bajtów pomyślnie wysłanych. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.

To przeciążenie wymaga buforu zawierającego dane, które chcesz wysłać. Wartość domyślna SocketFlags to 0, wartość domyślna przesunięcia buforu to 0, a liczba bajtów do wysłania wartości domyślnych do rozmiaru buforu.

Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć Accept go do akceptowania połączenia przychodzącego.

Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody, musisz wywołać metodę przed każdym wywołaniem Connect metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.

Jeśli używasz protokołu zorientowanego na połączenie, Send zablokuje do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczbę bajtów w buforze. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.

Uwaga

Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Ważne

Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.

Zobacz też

Dotyczy

Send(ReadOnlySpan<Byte>)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Wysyła dane do połączonego Socket.

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

Parametry

buffer
ReadOnlySpan<Byte>

Zakres bajtów, który zawiera dane do wysłania.

Zwraca

Liczba bajtów wysłanych do obiektu Socket.

Wyjątki

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Uwagi

Send synchronicznie wysyła dane do hosta zdalnego określonego w Connect metodzie or Accept i zwraca liczbę bajtów pomyślnie wysłanych. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.

To przeciążenie wymaga buforu zawierającego dane, które chcesz wysłać. Wartość domyślna SocketFlags to 0, wartość domyślna przesunięcia buforu to 0, a liczba bajtów do wysłania wartości domyślnych do rozmiaru buforu.

Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć Accept go do akceptowania połączenia przychodzącego.

Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody, musisz wywołać metodę przed każdym wywołaniem Connect metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.

Jeśli używasz protokołu zorientowanego na połączenie, Send zablokuje do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczbę bajtów w buforze. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.

Uwaga

Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Ważne

Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.

Zobacz też

Dotyczy

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

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Wysyła określoną liczbę bajtów danych do połączonego Socket, zaczynając od określonego przesunięcia i używając określonego 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[]

Tablica typu Byte zawierająca dane do wysłania.

offset
Int32

Pozycja w buforze danych, w którym należy rozpocząć wysyłanie danych.

size
Int32

Liczba bajtów do wysłania.

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

errorCode
SocketError

SocketError Obiekt, który przechowuje błąd gniazda.

Zwraca

Liczba bajtów wysłanych do obiektu Socket.

Wyjątki

buffer to null.

offset wartość jest mniejsza niż 0.

-lub-

offset jest większa niż długość obiektu buffer.

-lub-

size wartość jest mniejsza niż 0.

-lub-

size jest większa niż długość buffer minus wartości parametru offset .

socketFlags nie jest prawidłową kombinacją wartości.

-lub-

Wystąpił błąd systemu operacyjnego podczas uzyskiwania dostępu do elementu Socket.

Została zamknięta Socket .

Przykłady

Poniższy przykład kodu określa bufor danych, przesunięcie, rozmiar i SocketFlags wysyłanie danych do połączonego elementu 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

Uwagi

Send synchronicznie wysyła dane do hosta zdalnego określonego w Connect metodzie or Accept i zwraca liczbę bajtów pomyślnie wysłanych. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.

W tym przeciążeniu, jeśli określisz flagę DontRoutesocketflags jako parametr, wysyłane dane nie będą kierowane.

Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć go Accept do akceptowania połączenia przychodzącego.

Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć polecenia SendTo. Jeśli nie używasz SendTometody , musisz wywołać wywołanie przed każdym wywołaniem Connect metody Send. Jest w porządku, aby użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego z .Connect Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.

Należy również upewnić się, że rozmiar nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się stanie, datagram nie zostanie wysłany i Send zgłosi błąd SocketException.

Jeśli używasz protokołu zorientowanego na połączenie, Send zablokuje do momentu wysłania żądanej liczby bajtów, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczba żądanych bajtów. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle żądanej liczby bajtów. Nie ma również gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.

Uwaga

Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.

Uwaga

Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Zobacz też

Dotyczy

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

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Wysyła zestaw buforów na liście do połączonego Socketelementu , przy użyciu określonego SocketFlagselementu .

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

Lista ArraySegment<T>typów Byte zawierających dane do wysłania.

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

errorCode
SocketError

SocketError Obiekt, który przechowuje błąd gniazda.

Zwraca

Liczba bajtów wysłanych do obiektu Socket.

Wyjątki

buffers to null.

buffers jest pusty.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Uwagi

To przeciążenie wymaga co najmniej jednego buforu zawierającego dane, które chcesz wysłać. Wartość domyślna SocketFlags to 0. Jeśli określisz flagę DontRoutesocketFlags jako parametr, wysyłane dane nie będą kierowane.

Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć go Accept do akceptowania połączenia przychodzącego.

Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody, musisz wywołać metodę przed każdym wywołaniem Connect metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.

Jeśli używasz protokołu zorientowanego na połączenie, Send zostanie zablokowany do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie braku blokowania może zakończyć się pomyślnie, Send nawet jeśli wysyła on mniej niż liczbę bajtów w buforze. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.

Uwaga

Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.

Uwaga

Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Dotyczy

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

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Wysyła określoną liczbę bajtów danych do połączonego Socket, zaczynając od określonego przesunięcia i używając określonego 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[]

Tablica typu Byte zawierająca dane do wysłania.

offset
Int32

Pozycja w buforze danych, w którym należy rozpocząć wysyłanie danych.

size
Int32

Liczba bajtów do wysłania.

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

Zwraca

Liczba bajtów wysłanych do obiektu Socket.

Wyjątki

buffer to null.

offset wartość jest mniejsza niż 0.

-lub-

offset jest większa niż długość obiektu buffer.

-lub-

size wartość jest mniejsza niż 0.

-lub-

size jest większa niż długość buffer minus wartości parametru offset .

socketFlags nie jest prawidłową kombinacją wartości.

-lub-

Wystąpił błąd systemu operacyjnego podczas uzyskiwania dostępu do elementu Socket.

Została zamknięta Socket .

Przykłady

Poniższy przykład kodu określa bufor danych, przesunięcie, rozmiar i SocketFlags wysyłanie danych do połączonego elementu 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

Uwagi

Send synchronicznie wysyła dane do hosta zdalnego określonego w Connect metodzie or Accept i zwraca liczbę bajtów pomyślnie wysłanych. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.

W tym przeciążeniu, jeśli określisz flagę DontRoutesocketflags jako parametr, wysyłane dane nie będą kierowane.

Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć go Accept do akceptowania połączenia przychodzącego.

Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć polecenia SendTo. Jeśli nie używasz SendTometody , musisz wywołać wywołanie przed każdym wywołaniem Connect metody Send. Jest w porządku, aby użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego z .Connect Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.

Należy również upewnić się, że rozmiar nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się stanie, datagram nie zostanie wysłany i Send zgłosi błąd SocketException.

Jeśli używasz protokołu zorientowanego na połączenie, Send zablokuje do momentu wysłania żądanej liczby bajtów, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczba żądanych bajtów. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle żądanej liczby bajtów. Nie ma również gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.

Uwaga

Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.

Uwaga

Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Zobacz też

Dotyczy

Send(Byte[], Int32, SocketFlags)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Wysyła określoną liczbę bajtów danych do połączonego Socketobiektu przy użyciu określonego SocketFlagselementu .

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[]

Tablica typu Byte zawierająca dane do wysłania.

size
Int32

Liczba bajtów do wysłania.

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

Zwraca

Liczba bajtów wysłanych do obiektu Socket.

Wyjątki

buffer to null.

size jest mniejsza niż 0 lub przekracza rozmiar buforu.

socketFlags nie jest prawidłową kombinacją wartości.

-lub-

Podczas uzyskiwania dostępu do gniazda występuje błąd systemu operacyjnego.

Została zamknięta Socket .

Przykłady

Poniższy przykład kodu wysyła dane znalezione w buforze i określa None wartość 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

Uwagi

Send synchronicznie wysyła dane do hosta zdalnego ustanowionego w Connect metodzie or Accept i zwraca liczbę bajtów pomyślnie wysłanych. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.

To przeciążenie wymaga buforu zawierającego dane, które chcesz wysłać, liczbę bajtów, które chcesz wysłać, oraz bitową kombinację dowolnego SocketFlagselementu . Jeśli określisz flagę DontRoutesocketflags jako parametr, wysyłane dane nie będą kierowane.

Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć Accept go do akceptowania połączenia przychodzącego.

Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie użyjesz SendTo metody, musisz wywołać metodę Connect przed każdym wywołaniem Send metody. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.

W przypadku protokołu Send zorientowanego na połączenie blok zostanie zablokowany do momentu wysłania żądanej liczby bajtów, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczba żądanych bajtów. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle żądanej liczby bajtów. Nie ma również gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.

Uwaga

Należy upewnić się, że rozmiar nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się stanie, datagram nie zostanie wysłany i Send zgłosi błąd SocketException. Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Ważne

Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.

Zobacz też

Dotyczy

Send(IList<ArraySegment<Byte>>)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Wysyła zestaw buforów na liście do połączonego Socketelementu .

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

Lista ArraySegment<T>typów Byte zawierających dane do wysłania.

Zwraca

Liczba bajtów wysłanych do obiektu Socket.

Wyjątki

buffers to null.

buffers jest pusty.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda. Zobacz sekcję uwagi poniżej.

Została zamknięta Socket .

Uwagi

Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.

To przeciążenie wymaga co najmniej jednego buforu zawierającego dane, które chcesz wysłać.

Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć go Accept do akceptowania połączenia przychodzącego.

Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody, musisz wywołać metodę przed każdym wywołaniem Connect metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.

Jeśli używasz protokołu zorientowanego na połączenie, Send zostanie zablokowany do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczbę bajtów w buforze. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.

Uwaga

Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.

Uwaga

Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Dotyczy

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

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Wysyła zestaw buforów na liście do połączonego Socketelementu , przy użyciu określonego SocketFlagselementu .

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

Lista ArraySegment<T>typów Byte zawierających dane do wysłania.

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

Zwraca

Liczba bajtów wysłanych do obiektu Socket.

Wyjątki

buffers to null.

buffers jest pusty.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Uwagi

To przeciążenie wymaga co najmniej jednego buforu zawierającego dane, które chcesz wysłać. Wartość domyślna SocketFlags to 0. Jeśli określisz flagę DontRoutesocketFlags jako parametr, wysyłane dane nie będą kierowane.

Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć go Accept do akceptowania połączenia przychodzącego.

Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody, musisz wywołać metodę przed każdym wywołaniem Connect metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.

Jeśli używasz protokołu zorientowanego na połączenie, Send zostanie zablokowany do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie braku blokowania może zakończyć się pomyślnie, Send nawet jeśli wysyła on mniej niż liczbę bajtów w buforze. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.

Uwaga

Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.

Uwaga

Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Dotyczy

Send(Byte[], SocketFlags)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu .

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[]

Tablica typu Byte zawierająca dane do wysłania.

socketFlags
SocketFlags

Bitowa kombinacja SocketFlags wartości.

Zwraca

Liczba bajtów wysłanych do obiektu Socket.

Wyjątki

buffer to null.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Przykłady

W poniższym przykładzie kodu pokazano wysyłanie danych na połączonym obiekcie 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

Uwagi

Send synchronicznie wysyła dane do hosta zdalnego ustanowionego w Connect metodzie or Accept i zwraca liczbę bajtów pomyślnie wysłanych. Metoda Send może być używana zarówno dla protokołów zorientowanych na połączenie, jak i bez połączenia.

To przeciążenie wymaga buforu zawierającego dane, które chcesz wysłać i bitową kombinację .SocketFlags Przesunięcie buforu domyślnie wynosi 0, a liczba bajtów do wysłania wartości domyślnych do rozmiaru buforu. Jeśli określisz flagę jako wartość parametru DontRoutesocketflags , wysyłane dane nie będą kierowane.

Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć go Accept do akceptowania połączenia przychodzącego.

Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody , musisz wywołać metodę Connect przed każdym wywołaniem metody .Send Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.

Jeśli używasz protokołu zorientowanego na połączenie, Send zostanie zablokowany do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczbę bajtów w buforze. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle żądanej liczby bajtów. Nie ma również gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.

Uwaga

Należy upewnić się, że rozmiar buforu nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się stanie, datagram nie zostanie wysłany i Send zgłosi błąd SocketException. Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.

Uwaga

Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Zobacz też

Dotyczy

Send(ReadOnlySpan<Byte>, SocketFlags)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu .

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>

Zakres bajtów, który zawiera dane do wysłania.

socketFlags
SocketFlags

Bitowa kombinacja wartości wyliczenia, która określa zachowania wysyłania i odbierania.

Zwraca

Liczba bajtów wysłanych do obiektu Socket.

Wyjątki

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Zobacz też

Dotyczy

Send(Byte[])

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Wysyła dane do połączonego Socket.

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

Parametry

buffer
Byte[]

Tablica typu Byte zawierająca dane do wysłania.

Zwraca

Liczba bajtów wysłanych do obiektu Socket.

Wyjątki

buffer to null.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Przykłady

W poniższym przykładzie kodu pokazano wysyłanie danych na połączonym obiekcie 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

Uwagi

Send synchronicznie wysyła dane do hosta zdalnego określonego w Connect metodzie or Accept i zwraca liczbę bajtów pomyślnie wysłanych. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.

To przeciążenie wymaga buforu zawierającego dane, które chcesz wysłać. Wartość domyślna SocketFlags to 0, wartość domyślna przesunięcia buforu to 0, a liczba bajtów do wysłania wartości domyślnych do rozmiaru buforu.

Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć go Accept do akceptowania połączenia przychodzącego.

Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody, musisz wywołać metodę przed każdym wywołaniem Connect metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.

Jeśli używasz protokołu zorientowanego na połączenie, Send zostanie zablokowany do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczbę bajtów w buforze. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.

Uwaga

Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.

Uwaga

Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Zobacz też

Dotyczy