Поделиться через


Socket.Send Метод

Определение

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

Перегрузки

Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)

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

Send(ReadOnlySpan<Byte>)

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

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

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

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

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

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

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

Send(Byte[], Int32, SocketFlags)

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

Send(IList<ArraySegment<Byte>>)

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

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

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

Send(Byte[], SocketFlags)

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

Send(ReadOnlySpan<Byte>, SocketFlags)

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

Send(Byte[])

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

Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

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

Параметры

buffer
ReadOnlySpan<Byte>

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

socketFlags
SocketFlags

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

errorCode
SocketError

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

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

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

Исключения

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

Socket был закрыт.

Комментарии

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

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

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

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

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

Примечание

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

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

Важно!

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

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

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

Send(ReadOnlySpan<Byte>)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

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

Параметры

buffer
ReadOnlySpan<Byte>

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

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

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

Исключения

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

Socket был закрыт.

Комментарии

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

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

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

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

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

Примечание

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

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

Важно!

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

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

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

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

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

Отправляет указанное количество байтов данных в подключенный 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, содержащий ошибку сокета.

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

Количество байтов, отправленных в 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, bytes.Length, SocketFlags.None);

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

End Function 'SendReceiveTest4

Комментарии

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

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

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

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

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

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

Примечание

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

Примечание

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

Примечание

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

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

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

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

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

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

Параметры

buffers
IList<ArraySegment<Byte>>

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

socketFlags
SocketFlags

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

errorCode
SocketError

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

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

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

Исключения

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

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

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

Socket был закрыт.

Комментарии

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

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

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

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

Примечание

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

Примечание

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

Примечание

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

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

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

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

Отправляет указанное количество байтов данных в подключенный 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.

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

Количество байтов, отправленных в 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, bytes.Length, SocketFlags.None);

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

End Function 'SendReceiveTest4

Комментарии

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

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

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

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

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

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

Примечание

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

Примечание

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

Примечание

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

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

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

Send(Byte[], Int32, SocketFlags)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

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

Параметры

buffer
Byte[]

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

size
Int32

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

socketFlags
SocketFlags

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

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

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

End Function 'SendReceiveTest3

Комментарии

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

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

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

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

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

Примечание

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

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

Важно!

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

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

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

Send(IList<ArraySegment<Byte>>)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

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

Параметры

buffers
IList<ArraySegment<Byte>>

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

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

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

Исключения

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

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

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

Socket был закрыт.

Комментарии

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

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

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

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

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

Примечание

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

Примечание

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

Примечание

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

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

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

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

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

Параметры

buffers
IList<ArraySegment<Byte>>

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

socketFlags
SocketFlags

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

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

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

Исключения

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

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

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

Socket был закрыт.

Комментарии

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

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

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

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

Примечание

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

Примечание

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

Примечание

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

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

Send(Byte[], SocketFlags)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

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

Параметры

buffer
Byte[]

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

socketFlags
SocketFlags

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

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

Количество байтов, отправленных в 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, а число отправляемых байтов — по умолчанию к размеру буфера. Если указать флаг в DontRoutesocketflags качестве значения параметра, отправляемые данные не будут перенаправлены.

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

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

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

Примечание

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

Примечание

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

Примечание

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

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

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

Send(ReadOnlySpan<Byte>, SocketFlags)

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

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

Параметры

buffer
ReadOnlySpan<Byte>

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

socketFlags
SocketFlags

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

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

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

Исключения

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

Socket был закрыт.

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

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

Send(Byte[])

Исходный код:
Socket.cs
Исходный код:
Socket.cs
Исходный код:
Socket.cs

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

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

Параметры

buffer
Byte[]

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

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

Количество байтов, отправленных в 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 перед вызовом SocketExceptionэтого метода, иначе Send вызовет исключение . Если вы используете протокол, ориентированный на подключение, необходимо либо использовать Connect для установки подключения к удаленному узлу, либо использовать для Accept принятия входящего подключения.

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

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

Примечание

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

Примечание

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

Примечание

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

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

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