Socket.Send Метод

Определение

Передает данные в подключенный объект Socket.

Перегрузки

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

Отправляет набор буферов в список на подключенный объект Socket, используя указанный объект SocketFlags.

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

Отправляет указанное количество байтов данных в подключенный Socket, начиная с заданного смещения и используя заданный параметр SocketFlags.

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

Отправляет указанное количество байтов данных в подключенный Socket, начиная с заданного смещения и используя заданный параметр SocketFlags.

Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)

Передает данные в подключенный объект Socket, используя заданный объект SocketFlags.

Send(Byte[], Int32, SocketFlags)

Посылает указанное число байтов данных на подключенный объект Socket, используя заданный объект SocketFlags.

Send(IList<ArraySegment<Byte>>)

Отправляет набор буферов в список на подключенный объект Socket.

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

Отправляет набор буферов в список на подключенный объект Socket, используя указанный объект SocketFlags.

Send(Byte[])

Передает данные в подключенный объект Socket.

Send(ReadOnlySpan<Byte>, SocketFlags)

Передает данные в подключенный объект Socket, используя заданный объект SocketFlags.

Send(Byte[], SocketFlags)

Передает данные в подключенный объект Socket, используя заданный объект SocketFlags.

Send(ReadOnlySpan<Byte>)

Передает данные в подключенный объект Socket.

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

Важно!

Этот API несовместим с CLS.

Альтернативный вариант, совместимый с CLS
System.Net.Sockets.Socket.Send(Byte[], Int32, SocketFlags)

Отправляет набор буферов в список на подключенный объект Socket, используя указанный объект SocketFlags.

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

Параметры

buffers
IList<ArraySegment<Byte>>

Список объектов ArraySegment<T> типа Byte, содержащих данные для отправки.

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

errorCode
SocketError

Объект SocketError, содержащий ошибку сокета.

Возвращаемое значение

Int32

Количество байтов, отправленных в Socket.

Атрибуты

Исключения

buffers имеет значение null.

Параметр buffers пуст.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Комментарии

Для этой перегрузки требуется по крайней мере один буфер, содержащий данные, которые необходимо отправить. SocketFlagsЗначение по умолчанию равно 0. Если указать в DontRoute качестве socketFlags параметра флаг, отправляемые данные не будут маршрутизироваться.

Если используется протокол без установления соединения, необходимо вызвать Connect метод перед вызовом этого метода или Send вызвать исключение SocketException . Если используется протокол, ориентированный на соединение, необходимо либо использовать Connect для установления соединения с удаленным узлом, либо использовать Accept для приема входящего подключения.

Если вы используете протокол без установления соединения и планируете отправку данных на несколько разных узлов, следует использовать SendTo метод. Если метод не используется SendTo , необходимо вызвать Connect перед каждым вызовом метода Send . Вы можете использовать SendTo даже после установки удаленного узла по умолчанию с помощью Connect . Можно также изменить удаленный узел по умолчанию перед вызовом Send , сделав еще один вызов Connect .

Если используется протокол, ориентированный на соединение, Send будет блокироваться до тех пор, пока не будут отправлены все байты в буфере, если не было задано время ожидания с помощью Socket.SendTimeout . Если значение времени ожидания было превышено, Send вызов выдаст исключение SocketException . В режиме без блокировки Send может завершиться успешно, даже если число байтов в буфере меньше числа. Ответственность за отслеживание числа отправленных байтов и повтор операции до тех пор, пока приложение не отправит байты в буфере. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение Send метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

Применяется к

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

Отправляет указанное количество байтов данных в подключенный Socket, начиная с заданного смещения и используя заданный параметр SocketFlags.

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

Параметры

buffer
Byte[]

Массив типа Byte, содержащий данные для отправки.

offset
Int32

Положение в буфере данных, с которого начинается отправка данных.

size
Int32

Количество байтов для отправки.

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

errorCode
SocketError

Объект SocketError, содержащий ошибку сокета.

Возвращаемое значение

Int32

Количество байтов, отправленных в Socket.

Исключения

buffer имеет значение null.

Значение параметраoffset меньше 0.

-или-

Значение offset превышает длину buffer.

-или-

Значение параметраsize меньше 0.

-или-

Значение size превышает значение, полученное, если отнять от длины buffer значение параметра offset.

socketFlags — недопустимое сочетание значений.

-или-

Произошла ошибка операционной системы при доступе к Socket.

Socket был закрыт.

Примеры

В следующем примере кода задаются буфер данных, смещение, размер и SocketFlags для отправки данных в соединение Socket .

// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and socket flags.
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, 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);
        return (e.ErrorCode);
    }
    return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer, offset, message size, and socket flags.
Public Shared Function SendReceiveTest4(ByVal server As Socket) As Integer 
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim byteCount As Integer = server.Send(msg, 0, msg.Length, SocketFlags.None)
        Console.WriteLine("Sent {0} bytes.", byteCount)
        
        ' Get reply from the server.
        byteCount = server.Receive(bytes, 0, server.Available, SocketFlags.None)
        
        If byteCount > 0 Then
            Console.WriteLine(Encoding.UTF8.GetString(bytes))
        End If
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest4

Комментарии

Send синхронно отправляет данные на удаленный узел, указанный в Connect Accept методе или, и возвращает число успешно отправленных байтов. Send можно использовать для протоколов, ориентированных на подключение и без подключения.

В этой перегрузке при указании DontRoute флага в качестве socketflags параметра отправляемые данные не будут маршрутизироваться.

Если используется протокол без установления соединения, необходимо вызвать Connect метод перед вызовом этого метода или Send вызвать исключение SocketException . Если используется протокол, ориентированный на соединение, необходимо либо использовать Connect для установления соединения с удаленным узлом, либо использовать Accept для приема входящего подключения.

Если вы используете протокол без установления соединения и планируете отправку данных на несколько разных узлов, следует использовать SendTo . Если вы не используете SendTo , то придется вызывать Connect перед каждым вызовом Send . Его SendTo можно использовать даже после установки удаленного узла по умолчанию с Connect . Можно также изменить удаленный узел по умолчанию перед вызовом Send , сделав еще один вызов Connect .

Кроме того, необходимо убедиться, что размер не превышает максимальный размер пакета для базового поставщика услуг. Если это так, датаграмма не будет отправлена и Send создаст исключение SocketException .

Если используется протокол, ориентированный на соединение, Send блокируется до тех пор, пока не будет отправлено запрошенное число байтов, если не было задано время ожидания с помощью Socket.SendTimeout . Если значение времени ожидания было превышено, Send вызов выдаст исключение SocketException . В неблокирующем режиме Send может завершиться успешно, даже если количество отправленных байтов превышает. Ответственность за отслеживание числа отправленных байтов и повтор операции до тех пор, пока приложение не отправит запрошенное число байтов. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение Send метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

См. также раздел

Применяется к

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

Отправляет указанное количество байтов данных в подключенный Socket, начиная с заданного смещения и используя заданный параметр SocketFlags.

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

Параметры

buffer
Byte[]

Массив типа Byte, содержащий данные для отправки.

offset
Int32

Положение в буфере данных, с которого начинается отправка данных.

size
Int32

Количество байтов для отправки.

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

Возвращаемое значение

Int32

Количество байтов, отправленных в Socket.

Исключения

buffer имеет значение null.

Значение параметраoffset меньше 0.

-или-

Значение offset превышает длину buffer.

-или-

Значение параметраsize меньше 0.

-или-

Значение size превышает значение, полученное, если отнять от длины buffer значение параметра offset.

socketFlags — недопустимое сочетание значений.

-или-

Произошла ошибка операционной системы при доступе к Socket.

Socket был закрыт.

Примеры

В следующем примере кода задаются буфер данных, смещение, размер и SocketFlags для отправки данных в соединение Socket .

// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and socket flags.
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, 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);
        return (e.ErrorCode);
    }
    return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer, offset, message size, and socket flags.
Public Shared Function SendReceiveTest4(ByVal server As Socket) As Integer 
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim byteCount As Integer = server.Send(msg, 0, msg.Length, SocketFlags.None)
        Console.WriteLine("Sent {0} bytes.", byteCount)
        
        ' Get reply from the server.
        byteCount = server.Receive(bytes, 0, server.Available, SocketFlags.None)
        
        If byteCount > 0 Then
            Console.WriteLine(Encoding.UTF8.GetString(bytes))
        End If
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest4

Комментарии

Send синхронно отправляет данные на удаленный узел, указанный в Connect Accept методе или, и возвращает число успешно отправленных байтов. Send можно использовать для протоколов, ориентированных на подключение и без подключения.

В этой перегрузке при указании DontRoute флага в качестве socketflags параметра отправляемые данные не будут маршрутизироваться.

Если используется протокол без установления соединения, необходимо вызвать Connect метод перед вызовом этого метода или Send вызвать исключение SocketException . Если используется протокол, ориентированный на соединение, необходимо либо использовать Connect для установления соединения с удаленным узлом, либо использовать Accept для приема входящего подключения.

Если вы используете протокол без установления соединения и планируете отправку данных на несколько разных узлов, следует использовать SendTo . Если вы не используете SendTo , то придется вызывать Connect перед каждым вызовом Send . Его SendTo можно использовать даже после установки удаленного узла по умолчанию с Connect . Можно также изменить удаленный узел по умолчанию перед вызовом Send , сделав еще один вызов Connect .

Кроме того, необходимо убедиться, что размер не превышает максимальный размер пакета для базового поставщика услуг. Если это так, датаграмма не будет отправлена и Send создаст исключение SocketException .

Если используется протокол, ориентированный на соединение, Send блокируется до тех пор, пока не будет отправлено запрошенное число байтов, если не было задано время ожидания с помощью Socket.SendTimeout . Если значение времени ожидания было превышено, Send вызов выдаст исключение SocketException . В неблокирующем режиме Send может завершиться успешно, даже если количество отправленных байтов превышает. Ответственность за отслеживание числа отправленных байтов и повтор операции до тех пор, пока приложение не отправит запрошенное число байтов. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение Send метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

См. также раздел

Применяется к

Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)

Передает данные в подключенный объект Socket, используя заданный объект SocketFlags.

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

Параметры

buffer
ReadOnlySpan<Byte>

Диапазон байтов, содержащий отправляемые данные.

socketFlags
SocketFlags

Побитовое сочетание значений перечисления, которое задает поведение получения и отправки.

errorCode
SocketError

При возврате из этого метода содержит одно из значений перечисления, которое определяет коды ошибок для сокета.

Возвращаемое значение

Int32

Количество байтов, отправленных в Socket.

Исключения

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Комментарии

Send синхронно отправляет данные на удаленный узел, указанный в Connect Accept методе или, и возвращает число успешно отправленных байтов. Send можно использовать для протоколов, ориентированных на подключение и без подключения.

Для этой перегрузки требуется буфер, содержащий данные, которые необходимо отправить. SocketFlagsЗначение по умолчанию равно 0, смещение буфера по умолчанию равно 0, а число байтов для отправки по умолчанию равно размеру буфера.

Если вы используете протокол без установления соединения, необходимо вызвать Connect метод перед вызовом этого метода или Send вызвать исключение SocketException . Если используется протокол, ориентированный на подключение, необходимо либо использовать Connect для установления соединения с удаленным узлом, либо использовать Accept для приема входящего подключения.

Если вы используете протокол без установления соединения и планируете отправку данных на несколько разных узлов, следует использовать SendTo метод. Если метод не используется SendTo , то Connect перед каждым вызовом необходимо вызвать Send . Вы можете использовать SendTo даже после установки удаленного узла по умолчанию с помощью Connect . Можно также изменить удаленный узел по умолчанию перед вызовом Send , сделав еще один вызов Connect .

Если используется протокол, ориентированный на соединение, Send будет блокироваться до тех пор, пока не будут отправлены все байты в буфере, если не было задано время ожидания с помощью Socket.SendTimeout . Если значение времени ожидания было превышено, Send вызов выдаст исключение SocketException . В неблокирующем режиме Send может завершиться успешно, даже если число байтов в буфере меньше числа. Ответственность за отслеживание числа отправленных байтов и повтор операции до тех пор, пока приложение не отправит байты в буфере. Также нет никакой гарантии, что отправленные данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение Send метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

Важно!

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

См. также раздел

Применяется к

Send(Byte[], Int32, SocketFlags)

Посылает указанное число байтов данных на подключенный объект Socket, используя заданный объект SocketFlags.

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

Параметры

buffer
Byte[]

Массив типа Byte, содержащий данные для отправки.

size
Int32

Количество байтов для отправки.

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

Возвращаемое значение

Int32

Количество байтов, отправленных в Socket.

Исключения

buffer имеет значение null.

Значение параметра size меньше 0 или превышает размер буфера.

socketFlags — недопустимое сочетание значений.

-или-

Сбой операционной системы при доступе к сокету.

Socket был закрыт.

Примеры

Следующий пример кода отправляет данные, найденные в буфере, и указывает None для 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, 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);
        return (e.ErrorCode);
    }
    return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer, message size, and socket flags.
Public Shared Function SendReceiveTest3(ByVal server As Socket) As Integer 
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim i As Integer = server.Send(msg, msg.Length, SocketFlags.None)
        Console.WriteLine("Sent {0} bytes.", i)
        
        ' Get reply from the server.
        Dim byteCount As Integer = server.Receive(bytes, server.Available, SocketFlags.None)
        If byteCount > 0 Then
            Console.WriteLine(Encoding.UTF8.GetString(bytes))
        End If
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest3

Комментарии

Send синхронно отправляет данные на удаленный узел, установленный в Connect Accept методе или, и возвращает число успешно отправленных байтов. Send можно использовать для протоколов, ориентированных на подключение и без подключения.

Для этой перегрузки требуется буфер, содержащий данные, которые необходимо отправить, число байтов, которые требуется отправить, и побитовое сочетание любого из них SocketFlags . Если указать в DontRoute качестве socketflags параметра флаг, отправляемые данные не будут маршрутизироваться.

Если вы используете протокол без установления соединения, необходимо вызвать Connect метод перед вызовом этого метода или Send вызвать исключение SocketException . Если используется протокол, ориентированный на подключение, необходимо либо использовать Connect для установления соединения с удаленным узлом, либо использовать Accept для приема входящего подключения.

Если вы используете протокол без установления соединения и планируете отправку данных на несколько разных узлов, следует использовать SendTo метод. Если вы дон'тусе SendTo метод, необходимо вызвать Connect метод перед каждым вызовом Send метода. Вы можете использовать SendTo даже после установки удаленного узла по умолчанию с помощью Connect . Можно также изменить удаленный узел по умолчанию перед вызовом Send , сделав еще один вызов Connect .

При использовании протокола, ориентированного на соединение, Send блокируется до тех пор, пока не будет отправлено запрошенное число байтов, если не было задано время ожидания с помощью Socket.SendTimeout . Если значение времени ожидания было превышено, Send вызов выдаст исключение SocketException . В неблокирующем режиме Send может завершиться успешно, даже если количество отправленных байтов превышает. Ответственность за отслеживание числа отправленных байтов и повтор операции до тех пор, пока приложение не отправит запрошенное число байтов. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение Send метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Необходимо убедиться, что размер не превышает максимальный размер пакета для базового поставщика услуг. Если это так, датаграмма не будет отправлена и Send создаст исключение SocketException . Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

Важно!

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

См. также раздел

Применяется к

Send(IList<ArraySegment<Byte>>)

Отправляет набор буферов в список на подключенный объект Socket.

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

Параметры

buffers
IList<ArraySegment<Byte>>

Список объектов ArraySegment<T> типа Byte, содержащих данные для отправки.

Возвращаемое значение

Int32

Количество байтов, отправленных в Socket.

Исключения

buffers имеет значение null.

Параметр buffers пуст.

Произошла ошибка при попытке доступа к сокету. См. ниже примeчания к данному разделу.

Socket был закрыт.

Комментарии

Send можно использовать для протоколов, ориентированных на подключение и без подключения.

Для этой перегрузки требуется по крайней мере один буфер, содержащий данные, которые необходимо отправить.

Если используется протокол без установления соединения, необходимо вызвать Connect метод перед вызовом этого метода или Send вызвать исключение SocketException . Если используется протокол, ориентированный на соединение, необходимо либо использовать Connect для установления соединения с удаленным узлом, либо использовать Accept для приема входящего подключения.

Если вы используете протокол без установления соединения и планируете отправку данных на несколько разных узлов, следует использовать SendTo метод. Если метод не используется SendTo , необходимо вызвать Connect перед каждым вызовом метода Send . Вы можете использовать SendTo даже после установки удаленного узла по умолчанию с помощью Connect . Можно также изменить удаленный узел по умолчанию перед вызовом Send , сделав еще один вызов Connect .

Если используется протокол, ориентированный на соединение, Send будет блокироваться до тех пор, пока не будут отправлены все байты в буфере, если не было задано время ожидания с помощью Socket.SendTimeout . Если значение времени ожидания было превышено, Send вызов выдаст исключение SocketException . В неблокирующем режиме Send может завершиться успешно, даже если число байтов в буфере меньше числа. Ответственность за отслеживание числа отправленных байтов и повтор операции до тех пор, пока приложение не отправит байты в буфере. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение Send метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

Применяется к

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

Отправляет набор буферов в список на подключенный объект Socket, используя указанный объект SocketFlags.

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

Параметры

buffers
IList<ArraySegment<Byte>>

Список объектов ArraySegment<T> типа Byte, содержащих данные для отправки.

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

Возвращаемое значение

Int32

Количество байтов, отправленных в Socket.

Исключения

buffers имеет значение null.

Параметр buffers пуст.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Комментарии

Для этой перегрузки требуется по крайней мере один буфер, содержащий данные, которые необходимо отправить. SocketFlagsЗначение по умолчанию равно 0. Если указать в DontRoute качестве socketFlags параметра флаг, отправляемые данные не будут маршрутизироваться.

Если используется протокол без установления соединения, необходимо вызвать Connect метод перед вызовом этого метода или Send вызвать исключение SocketException . Если используется протокол, ориентированный на соединение, необходимо либо использовать Connect для установления соединения с удаленным узлом, либо использовать Accept для приема входящего подключения.

Если вы используете протокол без установления соединения и планируете отправку данных на несколько разных узлов, следует использовать SendTo метод. Если метод не используется SendTo , необходимо вызвать Connect перед каждым вызовом метода Send . Вы можете использовать SendTo даже после установки удаленного узла по умолчанию с помощью Connect . Можно также изменить удаленный узел по умолчанию перед вызовом Send , сделав еще один вызов Connect .

Если используется протокол, ориентированный на соединение, Send будет блокироваться до тех пор, пока не будут отправлены все байты в буфере, если не было задано время ожидания с помощью Socket.SendTimeout . Если значение времени ожидания было превышено, Send вызов выдаст исключение SocketException . В режиме без блокировки Send может завершиться успешно, даже если число байтов в буфере меньше числа. Ответственность за отслеживание числа отправленных байтов и повтор операции до тех пор, пока приложение не отправит байты в буфере. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение Send метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

Применяется к

Send(Byte[])

Передает данные в подключенный объект Socket.

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

Параметры

buffer
Byte[]

Массив типа Byte, содержащий данные для отправки.

Возвращаемое значение

Int32

Количество байтов, отправленных в Socket.

Исключения

buffer имеет значение null.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Примеры

В следующем примере кода показано, как отправлять данные на подключенном Socket .

// Displays sending with a connected socket
// using the overload that takes a buffer.
int SendReceiveTest1( Socket^ server )
{
   array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
   array<Byte>^ bytes = gcnew array<Byte>(256);
   try
   {
      // Blocks until send returns.
      int byteCount = server->Send( msg );
      Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
      
      // Get reply from the server.
      byteCount = server->Receive( bytes );
      if ( byteCount > 0 )
      {
         Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
      return ( e->ErrorCode );
   }
   return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer.
public static int SendReceiveTest1(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try
    {
        // Blocks until send returns.
        int i = server.Send(msg);
        Console.WriteLine("Sent {0} bytes.", i);

        // Get reply from the server.
        i = server.Receive(bytes);
        Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer.
Public Shared Function SendReceiveTest1(ByVal server As Socket) As Integer 
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim i As Integer = server.Send(msg)
        Console.WriteLine("Sent {0} bytes.", i)
        
        ' Get reply from the server.
        i = server.Receive(bytes)
        Console.WriteLine(Encoding.UTF8.GetString(bytes))
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest1

Комментарии

Send синхронно отправляет данные на удаленный узел, указанный в Connect Accept методе или, и возвращает число успешно отправленных байтов. Send можно использовать для протоколов, ориентированных на подключение и без подключения.

Для этой перегрузки требуется буфер, содержащий данные, которые необходимо отправить. SocketFlagsЗначение по умолчанию равно 0, смещение буфера по умолчанию равно 0, а число байтов для отправки по умолчанию равно размеру буфера.

Если используется протокол без установления соединения, необходимо вызвать Connect метод перед вызовом этого метода или Send вызвать исключение SocketException . Если используется протокол, ориентированный на соединение, необходимо либо использовать Connect для установления соединения с удаленным узлом, либо использовать Accept для приема входящего подключения.

Если вы используете протокол без установления соединения и планируете отправку данных на несколько разных узлов, следует использовать SendTo метод. Если метод не используется SendTo , необходимо вызвать Connect перед каждым вызовом метода Send . Вы можете использовать SendTo даже после установки удаленного узла по умолчанию с помощью Connect . Можно также изменить удаленный узел по умолчанию перед вызовом Send , сделав еще один вызов Connect .

Если используется протокол, ориентированный на соединение, Send будет блокироваться до тех пор, пока не будут отправлены все байты в буфере, если не было задано время ожидания с помощью Socket.SendTimeout . Если значение времени ожидания было превышено, Send вызов выдаст исключение SocketException . В неблокирующем режиме Send может завершиться успешно, даже если число байтов в буфере меньше числа. Ответственность за отслеживание числа отправленных байтов и повтор операции до тех пор, пока приложение не отправит байты в буфере. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение Send метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

См. также раздел

Применяется к

Send(ReadOnlySpan<Byte>, SocketFlags)

Передает данные в подключенный объект Socket, используя заданный объект SocketFlags.

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

Параметры

buffer
ReadOnlySpan<Byte>

Диапазон байтов, содержащий отправляемые данные.

socketFlags
SocketFlags

Побитовое сочетание значений перечисления, которое задает поведение получения и отправки.

Возвращаемое значение

Int32

Количество байтов, отправленных в Socket.

Исключения

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

См. также раздел

Применяется к

Send(Byte[], SocketFlags)

Передает данные в подключенный объект Socket, используя заданный объект SocketFlags.

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

Параметры

buffer
Byte[]

Массив типа Byte, содержащий данные для отправки.

socketFlags
SocketFlags

Поразрядное сочетание значений SocketFlags.

Возвращаемое значение

Int32

Количество байтов, отправленных в Socket.

Исключения

buffer имеет значение null.

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Примеры

В следующем примере кода показано, как отправлять данные на подключенном Socket .

// Displays sending with a connected socket
// using the overload that takes a buffer and socket flags.
int SendReceiveTest2( Socket^ server )
{
   array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
   array<Byte>^ bytes = gcnew array<Byte>(256);
   try
   {
      // Blocks until send returns.
      int byteCount = server->Send( msg, SocketFlags::None );
      Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
      
      // Get reply from the server.
      byteCount = server->Receive( bytes, SocketFlags::None );
      if ( byteCount > 0 )
      {
         Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
      }
   }
   catch ( SocketException^ e ) 
   {
      Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
      return (e->ErrorCode);
   }
   return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer and socket flags.
public static int SendReceiveTest2(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try
    {
        // Blocks until send returns.
        int byteCount = server.Send(msg, SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", byteCount);

        // Get reply from the server.
        byteCount = server.Receive(bytes, SocketFlags.None);
        if (byteCount > 0)
            Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer and socket flags.
Public Shared Function SendReceiveTest2(ByVal server As Socket) As Integer 
    Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
    Dim bytes(255) As Byte
    Try
        ' Blocks until send returns.
        Dim byteCount As Integer = server.Send(msg, SocketFlags.None)
        Console.WriteLine("Sent {0} bytes.", byteCount)
        
        ' Get reply from the server.
        byteCount = server.Receive(bytes, SocketFlags.None)
        If byteCount > 0 Then
            Console.WriteLine(Encoding.UTF8.GetString(bytes))
        End If
    Catch e As SocketException
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
        Return e.ErrorCode
    End Try
    Return 0

End Function 'SendReceiveTest2

Комментарии

Send синхронно отправляет данные на удаленный узел, установленный в Connect Accept методе или, и возвращает число успешно отправленных байтов. SendМетод можно использовать как для протоколов, ориентированных на подключение, так и для протокола без подключения.

Для этой перегрузки требуется буфер, содержащий данные, которые необходимо отправить, и побитовое сочетание SocketFlags . По умолчанию смещение буфера равно 0, а число байтов для отправки по умолчанию равно размеру буфера. Если в DontRoute качестве значения параметра указан флаг socketflags , отправляемые данные не будут маршрутизироваться.

Если используется протокол без установления соединения, необходимо вызвать Connect метод перед вызовом этого метода или Send вызвать исключение SocketException . Если используется протокол, ориентированный на соединение, необходимо либо использовать Connect для установления соединения с удаленным узлом, либо использовать Accept для приема входящего подключения.

Если вы используете протокол без установления соединения и планируете отправку данных на несколько разных узлов, следует использовать SendTo метод. Если метод не используется SendTo , необходимо вызвать Connect метод перед каждым вызовом метода Send . Вы можете использовать SendTo даже после установки удаленного узла по умолчанию с помощью Connect . Можно также изменить удаленный узел по умолчанию перед вызовом Send , сделав еще один вызов Connect .

Если используется протокол, ориентированный на соединение, Send будет блокироваться до тех пор, пока не будут отправлены все байты в буфере, если не было задано время ожидания с помощью Socket.SendTimeout . Если значение времени ожидания было превышено, Send вызов выдаст исключение SocketException . В неблокирующем режиме Send может завершиться успешно, даже если число байтов в буфере меньше числа. Ответственность за отслеживание числа отправленных байтов и повтор операции до тех пор, пока приложение не отправит запрошенное число байтов. Кроме того, не гарантируется, что отправляемые данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение Send метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Необходимо убедиться, что размер буфера не превышает максимальный размер пакета базового поставщика услуг. Если это так, датаграмма не будет отправлена и Send создаст исключение SocketException . Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

См. также раздел

Применяется к

Send(ReadOnlySpan<Byte>)

Передает данные в подключенный объект Socket.

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

Параметры

buffer
ReadOnlySpan<Byte>

Диапазон байтов, содержащий отправляемые данные.

Возвращаемое значение

Int32

Количество байтов, отправленных в Socket.

Исключения

Произошла ошибка при попытке доступа к сокету.

Socket был закрыт.

Комментарии

Send синхронно отправляет данные на удаленный узел, указанный в Connect Accept методе или, и возвращает число успешно отправленных байтов. Send можно использовать для протоколов, ориентированных на подключение и без подключения.

Для этой перегрузки требуется буфер, содержащий данные, которые необходимо отправить. SocketFlagsЗначение по умолчанию равно 0, смещение буфера по умолчанию равно 0, а число байтов для отправки по умолчанию равно размеру буфера.

Если вы используете протокол без установления соединения, необходимо вызвать Connect метод перед вызовом этого метода или Send вызвать исключение SocketException . Если используется протокол, ориентированный на подключение, необходимо либо использовать Connect для установления соединения с удаленным узлом, либо использовать Accept для приема входящего подключения.

Если вы используете протокол без установления соединения и планируете отправку данных на несколько разных узлов, следует использовать SendTo метод. Если метод не используется SendTo , то Connect перед каждым вызовом необходимо вызвать Send . Вы можете использовать SendTo даже после установки удаленного узла по умолчанию с помощью Connect . Можно также изменить удаленный узел по умолчанию перед вызовом Send , сделав еще один вызов Connect .

Если используется протокол, ориентированный на соединение, Send будет блокироваться до тех пор, пока не будут отправлены все байты в буфере, если не было задано время ожидания с помощью Socket.SendTimeout . Если значение времени ожидания было превышено, Send вызов выдаст исключение SocketException . В неблокирующем режиме Send может завершиться успешно, даже если число байтов в буфере меньше числа. Ответственность за отслеживание числа отправленных байтов и повтор операции до тех пор, пока приложение не отправит байты в буфере. Также нет никакой гарантии, что отправленные данные будут немедленно отображаться в сети. Чтобы повысить эффективность работы сети, базовая система может отложить передачу данных до тех пор, пока не будет собрано значительное количество исходящих. Успешное завершение Send метода означает, что базовая система имела место для буферизации данных для отправки в сеть.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

Важно!

Успешное завершение отправки не означает, что данные были успешно доставлены. Если в транспортной системе нет доступных буферных пространств для хранения данных, подходящих для передачи, отправка будет заблокирована, пока сокет не будет помещен в неблокирующий режим.

См. также раздел

Применяется к