Socket.Send 方法

定义

将数据发送到连接的 Socket

重载

Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)

使用指定的 Socket 将数据发送到连接的 SocketFlags

Send(ReadOnlySpan<Byte>)

将数据发送到连接的 Socket

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

从指定偏移量开始,使用指定 SocketFlags,将指定的数据字节数发送到已连接的 Socket

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

使用指定的 Socket,将列表中的一组缓冲区发送到连接的 SocketFlags

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

从指定偏移量开始,使用指定 SocketFlags,将指定的数据字节数发送到已连接的 Socket

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)

Source:
Socket.cs
Source:
Socket.cs
Source:
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 的字节数。

例外

尝试访问套接字时出错。

注解

Send将数据同步发送到 或 Accept 方法中指定的Connect远程主机,并返回成功发送的字节数。 Send 可用于面向连接的协议和无连接的协议。

此重载需要包含要发送的数据的缓冲区。 该值 SocketFlags 默认为 0,缓冲区偏移量默认为 0,要发送的字节数默认为缓冲区的大小。

如果使用无连接协议,则必须在调用此方法之前调用 Connect ,否则 Send 将引发 SocketException。 如果使用面向连接的协议,则必须使用 Connect 建立远程主机连接,或使用 Accept 接受传入连接。

如果使用无连接协议并计划将数据发送到多个不同的主机,则应使用 SendTo 方法。 如果不使用 SendTo 方法,则必须在每次调用 Send之前调用 Connect 。 即使已使用 Connect建立默认远程主机,也可以使用 SendTo 。 还可以在调用 Send 之前更改默认远程主机,方法是对 进行另一次调用 Connect

如果使用面向连接的协议,将阻止, Send 直到发送缓冲区中的所有字节,除非使用 Socket.SendTimeout设置了超时。 如果超出超时值,调用 Send 将引发 SocketException。 在非阻止模式下, Send 即使发送的字节数少于缓冲区中的字节数,也可能成功完成。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序在缓冲区中发送字节。 也不保证发送的数据会立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量传出数据。 方法的 Send 成功完成意味着基础系统有空间来缓冲网络发送的数据。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

重要

成功完成发送并不表示数据已成功传递。 如果传输系统中没有可用于保存要传输的数据的缓冲区空间,除非套接字已置于非阻止模式,否则发送将阻止。

另请参阅

适用于

Send(ReadOnlySpan<Byte>)

Source:
Socket.cs
Source:
Socket.cs
Source:
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 的字节数。

例外

尝试访问套接字时出错。

注解

Send将数据同步发送到 或 Accept 方法中指定的Connect远程主机,并返回成功发送的字节数。 Send 可用于面向连接的协议和无连接的协议。

此重载需要包含要发送的数据的缓冲区。 该值 SocketFlags 默认为 0,缓冲区偏移量默认为 0,要发送的字节数默认为缓冲区的大小。

如果使用无连接协议,则必须在调用此方法之前调用 Connect ,否则 Send 将引发 SocketException。 如果使用面向连接的协议,则必须使用 Connect 建立远程主机连接,或使用 Accept 接受传入连接。

如果使用无连接协议并计划将数据发送到多个不同的主机,则应使用 SendTo 方法。 如果不使用 SendTo 方法,则必须在每次调用 Send之前调用 Connect 。 即使已使用 Connect建立默认远程主机,也可以使用 SendTo 。 还可以在调用 Send 之前更改默认远程主机,方法是对 进行另一次调用 Connect

如果使用面向连接的协议,将阻止, Send 直到发送缓冲区中的所有字节,除非使用 Socket.SendTimeout设置了超时。 如果超出超时值,调用 Send 将引发 SocketException。 在非阻止模式下, Send 即使发送的字节数少于缓冲区中的字节数,也可能成功完成。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序在缓冲区中发送字节。 也不保证发送的数据会立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量传出数据。 方法的 Send 成功完成意味着基础系统有空间来缓冲网络发送的数据。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

重要

成功完成发送并不表示数据已成功传递。 如果传输系统中没有可用于保存要传输的数据的缓冲区空间,除非套接字已置于非阻止模式,否则发送将阻止。

另请参阅

适用于

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

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

从指定偏移量开始,使用指定 SocketFlags,将指定的数据字节数发送到已连接的 Socket

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 的字节数。

例外

buffernull

offset 小于 0。

offset 大于 buffer 的长度。

size 小于 0。

- 或 -

size 大于 buffer 的长度减去 offset 参数的值。

socketFlags 不是有效的值组合。

- 或 -

访问 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将数据同步发送到 或 Accept 方法中指定的Connect远程主机,并返回成功发送的字节数。 Send 可用于面向连接的协议和无连接的协议。

在此重载中 DontRoute ,如果将 标志指定为 socketflags 参数,则不会路由要发送的数据。

如果使用无连接协议,则必须在调用此方法之前调用 Connect ,否则 Send 将引发 SocketException。 如果使用面向连接的协议,则必须使用 Connect 建立远程主机连接,或使用 Accept 接受传入连接。

如果使用无连接协议并计划将数据发送到多个不同的主机,则应使用 SendTo。 如果不使用 SendTo,则必须在每次调用 之前调用 ConnectSendSendTo即使已使用 Connect建立了默认远程主机,也可以使用 。 还可以在调用 Send 之前更改默认远程主机,方法是对 进行另一次调用 Connect

还必须确保大小不超过基础服务提供程序的最大数据包大小。 如果存在,则不会发送数据报,并且 Send 会引发 SocketException

如果使用面向连接的协议,将阻止, Send 直到发送请求的字节数,除非使用 Socket.SendTimeout设置了超时。 如果超出超时值,调用 Send 将引发 SocketException。 在非阻止模式下, Send 即使发送的字节数少于请求的字节数,也可能成功完成。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序发送请求的字节数。 也不保证发送的数据会立即出现在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量传出数据。 方法的 Send 成功完成意味着基础系统有空间来缓冲网络发送的数据。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

注意

成功完成发送并不表示数据已成功传递。 如果传输系统中没有可用于保存要传输的数据的缓冲区空间,除非套接字已置于非阻止模式,否则发送将阻止。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

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

Source:
Socket.cs
Source:
Socket.cs
Source:
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 的字节数。

例外

buffersnull

buffers 为空。

尝试访问套接字时出错。

注解

此重载需要至少一个包含要发送的数据的缓冲区。 该值 SocketFlags 默认为 0。 如果将 标志指定 DontRoutesocketFlags 参数,则不会路由要发送的数据。

如果使用无连接协议,则必须在调用此方法之前调用 Connect ,否则 Send 将引发 SocketException。 如果使用面向连接的协议,则必须使用 Connect 建立远程主机连接,或使用 Accept 接受传入连接。

如果使用无连接协议并计划将数据发送到多个不同的主机,则应使用 SendTo 方法。 如果不使用 SendTo 方法,则必须在每次调用 之前调用 ConnectSend。 即使已使用 Connect建立默认远程主机,也可以使用 SendTo 。 还可以在调用 Send 之前更改默认远程主机,方法是对 进行另一次调用 Connect

如果使用面向连接的协议,将阻止, Send 直到发送缓冲区中的所有字节,除非使用 Socket.SendTimeout设置了超时。 如果超出超时值,调用 Send 将引发 SocketException。 在非阻塞模式下, Send 即使发送的字节数小于缓冲区中的字节数,也可能成功完成。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序在缓冲区中发送字节。 也不保证发送的数据会立即出现在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量传出数据。 方法的 Send 成功完成意味着基础系统有空间来缓冲网络发送的数据。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

注意

成功完成发送并不表示数据已成功传递。 如果传输系统中没有可用于保存要传输的数据的缓冲区空间,除非套接字已置于非阻止模式,否则发送将阻止。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

适用于

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

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

从指定偏移量开始,使用指定 SocketFlags,将指定的数据字节数发送到已连接的 Socket

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 的字节数。

例外

buffernull

offset 小于 0。

offset 大于 buffer 的长度。

size 小于 0。

- 或 -

size 大于 buffer 的长度减去 offset 参数的值。

socketFlags 不是有效的值组合。

- 或 -

访问 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将数据同步发送到 或 Accept 方法中指定的Connect远程主机,并返回成功发送的字节数。 Send 可用于面向连接的协议和无连接的协议。

在此重载中 DontRoute ,如果将 标志指定为 socketflags 参数,则不会路由要发送的数据。

如果使用无连接协议,则必须在调用此方法之前调用 Connect ,否则 Send 将引发 SocketException。 如果使用面向连接的协议,则必须使用 Connect 建立远程主机连接,或使用 Accept 接受传入连接。

如果使用无连接协议并计划将数据发送到多个不同的主机,则应使用 SendTo。 如果不使用 SendTo,则必须在每次调用 之前调用 ConnectSendSendTo即使已使用 Connect建立了默认远程主机,也可以使用 。 还可以在调用 Send 之前更改默认远程主机,方法是对 进行另一次调用 Connect

还必须确保大小不超过基础服务提供程序的最大数据包大小。 如果存在,则不会发送数据报,并且 Send 会引发 SocketException

如果使用面向连接的协议,将阻止, Send 直到发送请求的字节数,除非使用 Socket.SendTimeout设置了超时。 如果超出超时值,调用 Send 将引发 SocketException。 在非阻止模式下, Send 即使发送的字节数少于请求的字节数,也可能成功完成。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序发送请求的字节数。 也不保证发送的数据会立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量传出数据。 Send成功完成方法意味着基础系统有空间来缓冲网络发送的数据。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

注意

发送的成功完成并不表示数据已成功传递。 如果传输系统中没有可用于保存要传输的数据的缓冲区空间,除非套接字处于非阻止模式,否则发送将阻塞。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

Send(Byte[], Int32, SocketFlags)

Source:
Socket.cs
Source:
Socket.cs
Source:
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 的字节数。

例外

buffernull

size 小于 0 或超过缓冲区的大小。

socketFlags 不是有效的值组合。

- 或 -

访问套接字时发生操作系统错误。

示例

下面的代码示例发送在缓冲区中找到的数据,并为 指定 NoneSocketFlags

// 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将数据同步发送到在 或 Accept 方法中Connect建立的远程主机,并返回成功发送的字节数。 Send 可用于面向连接的协议和无连接的协议。

此重载需要一个缓冲区,其中包含要发送的数据、要发送的字节数以及任何 SocketFlags的按位组合。 如果将 标志指定 DontRoutesocketflags 参数,则不会路由要发送的数据。

如果使用无连接协议,则必须在调用此方法之前调用 Connect ,否则 Send 将引发 SocketException。 如果使用面向连接的协议,则必须使用 Connect 建立远程主机连接,或使用 Accept 接受传入连接。

如果使用无连接协议并计划将数据发送到多个不同的主机,则应使用 SendTo 方法。 如果不使用 SendTo 方法,则必须在每次调用 Connect 方法之前调用 Send 方法。 即使已使用 Connect建立了默认远程主机,也可以使用 SendTo 。 还可以在调用 Send 之前通过对 进行另一次调用 Connect来更改默认远程主机。

对于面向连接的协议, Send 将阻止,直到发送请求的字节数,除非使用 Socket.SendTimeout设置了超时。 如果超过超时值,调用 Send 将引发 SocketException。 在非阻止模式下, Send 即使发送的字节数少于所请求的字节数,也可能成功完成。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序发送请求的字节数。 也不保证发送的数据会立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量传出数据。 Send成功完成方法意味着基础系统有空间来缓冲网络发送的数据。

注意

必须确保大小不超过基础服务提供程序的最大数据包大小。 如果存在,则不会发送数据报,并将 Send 引发 SocketException。 如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

重要

发送的成功完成并不表示数据已成功传递。 如果传输系统中没有可用于保存要传输的数据的缓冲区空间,除非套接字处于非阻止模式,否则发送将阻塞。

另请参阅

适用于

Send(IList<ArraySegment<Byte>>)

Source:
Socket.cs
Source:
Socket.cs
Source:
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 的字节数。

例外

buffersnull

buffers 为空。

尝试访问套接字时出错。 请参见下面的备注部分。

注解

Send 可用于面向连接的协议和无连接的协议。

此重载至少需要一个缓冲区,其中包含要发送的数据。

如果使用无连接协议,则必须在调用此方法之前调用 Connect ,否则 Send 将引发 SocketException。 如果使用面向连接的协议,则必须使用 Connect 建立远程主机连接,或使用 Accept 接受传入连接。

如果使用无连接协议并计划将数据发送到多个不同的主机,则应使用 SendTo 方法。 如果不使用 SendTo 方法,则必须在每次调用 之前调用 ConnectSend。 即使已使用 Connect建立了默认远程主机,也可以使用 SendTo 。 还可以在调用 Send 之前更改默认远程主机,方法是再次调用 Connect

如果使用面向连接的协议, 将阻止, Send 直到发送缓冲区中的所有字节,除非使用 Socket.SendTimeout设置了超时。 如果超过超时值,调用 Send 将引发 SocketException。 在非阻止模式下, Send 即使发送的字节数小于缓冲区中的字节数,也可能成功完成。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序在缓冲区中发送字节。 也不保证发送的数据会立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量传出数据。 Send成功完成方法意味着基础系统有空间来缓冲网络发送的数据。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

注意

发送的成功完成并不表示数据已成功传递。 如果传输系统中没有可用于保存要传输的数据的缓冲区空间,除非套接字处于非阻止模式,否则发送将阻塞。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

适用于

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

Source:
Socket.cs
Source:
Socket.cs
Source:
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 的字节数。

例外

buffersnull

buffers 为空。

尝试访问套接字时出错。

注解

此重载至少需要一个缓冲区,其中包含要发送的数据。 该值 SocketFlags 默认为 0。 如果将 标志指定 DontRoutesocketFlags 参数,则不会路由要发送的数据。

如果使用无连接协议,则必须在调用此方法之前调用 Connect ,否则 Send 将引发 SocketException。 如果使用面向连接的协议,则必须使用 Connect 建立远程主机连接,或使用 Accept 接受传入连接。

如果使用无连接协议并计划将数据发送到多个不同的主机,则应使用 SendTo 方法。 如果不使用 SendTo 方法,则必须在每次调用 之前调用 ConnectSend。 即使已使用 Connect建立了默认远程主机,也可以使用 SendTo 。 还可以在调用 Send 之前更改默认远程主机,方法是再次调用 Connect

如果使用面向连接的协议, 将阻止, Send 直到发送缓冲区中的所有字节,除非使用 Socket.SendTimeout设置了超时。 如果超过超时值,调用 Send 将引发 SocketException。 在非阻塞模式下,即使发送的字节数小于缓冲区中的字节数, Send 也可能成功完成。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序在缓冲区中发送字节。 也不保证发送的数据会立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量传出数据。 Send成功完成方法意味着基础系统有空间来缓冲网络发送的数据。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

注意

发送的成功完成并不表示数据已成功传递。 如果传输系统中没有可用于保存要传输的数据的缓冲区空间,除非套接字处于非阻止模式,否则发送将阻塞。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

适用于

Send(Byte[], SocketFlags)

Source:
Socket.cs
Source:
Socket.cs
Source:
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 的字节数。

例外

buffernull

尝试访问套接字时出错。

示例

下面的代码示例演示如何在连接的 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将数据同步发送到在 或 Accept 方法中Connect建立的远程主机,并返回成功发送的字节数。 方法 Send 可用于面向连接的协议和无连接协议。

此重载需要一个缓冲区,其中包含要发送的数据以及 的 SocketFlags按位组合。 缓冲区偏移量默认为 0,要发送的字节数默认为缓冲区的大小。 如果将标志指定 DontRoutesocketflags 参数值,则不会路由要发送的数据。

如果使用无连接协议,则必须在调用此方法之前调用 Connect ,否则 Send 将引发 SocketException。 如果使用面向连接的协议,则必须使用 Connect 建立远程主机连接,或使用 Accept 接受传入连接。

如果使用无连接协议并计划将数据发送到多个不同的主机,则应使用 SendTo 方法。 如果不使用 SendTo 方法,则必须在每次调用 Connect 之前调用 Send方法。 即使已使用 Connect建立了默认远程主机,也可以使用 SendTo 。 还可以在调用 Send 之前更改默认远程主机,方法是再次调用 Connect

如果使用面向连接的协议, 将阻止, Send 直到发送缓冲区中的所有字节,除非使用 Socket.SendTimeout设置了超时。 如果超过超时值,调用 Send 将引发 SocketException。 在非阻止模式下, Send 即使发送的字节数小于缓冲区中的字节数,也可能成功完成。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序发送请求的字节数。 也不保证发送的数据会立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量传出数据。 Send成功完成方法意味着基础系统有空间来缓冲网络发送的数据。

注意

必须确保缓冲区的大小不超过基础服务提供程序的最大数据包大小。 如果已发送,则不会发送数据报,并将 Send 引发 SocketException。 如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

注意

发送的成功完成并不表示数据已成功传递。 如果传输系统中没有可用于保存要传输的数据的缓冲区空间,除非套接字处于非阻止模式,否则发送将阻塞。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于

Send(ReadOnlySpan<Byte>, SocketFlags)

Source:
Socket.cs
Source:
Socket.cs
Source:
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 的字节数。

例外

尝试访问套接字时出错。

另请参阅

适用于

Send(Byte[])

Source:
Socket.cs
Source:
Socket.cs
Source:
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 的字节数。

例外

buffernull

尝试访问套接字时出错。

示例

下面的代码示例演示如何在连接的 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将数据同步发送到 或 Accept 方法中指定的Connect远程主机,并返回成功发送的字节数。 Send 可用于面向连接的协议和无连接的协议。

此重载需要包含要发送的数据的缓冲区。 值 SocketFlags 默认值为 0,缓冲区偏移量默认为 0,要发送的字节数默认为缓冲区的大小。

如果使用无连接协议,则必须在调用此方法之前调用 Connect ,否则 Send 将引发 SocketException。 如果使用面向连接的协议,则必须使用 Connect 建立远程主机连接,或使用 Accept 接受传入连接。

如果使用无连接协议并计划将数据发送到多个不同的主机,则应使用 SendTo 方法。 如果不使用 SendTo 方法,则必须在每次调用 之前调用 ConnectSend。 即使已使用 Connect建立了默认远程主机,也可以使用 SendTo 。 还可以在调用 Send 之前更改默认远程主机,方法是再次调用 Connect

如果使用面向连接的协议, 将阻止, Send 直到发送缓冲区中的所有字节,除非使用 Socket.SendTimeout设置了超时。 如果超过超时值,调用 Send 将引发 SocketException。 在非阻止模式下, Send 即使发送的字节数小于缓冲区中的字节数,也可能成功完成。 应用程序负责跟踪发送的字节数,并重试操作,直到应用程序在缓冲区中发送字节。 也不保证发送的数据会立即显示在网络上。 为了提高网络效率,基础系统可能会延迟传输,直到收集大量传出数据。 Send成功完成方法意味着基础系统有空间来缓冲网络发送的数据。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。

注意

发送的成功完成并不表示数据已成功传递。 如果传输系统中没有可用于保存要传输的数据的缓冲区空间,除非套接字处于非阻止模式,否则发送将阻塞。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于