Socket.SendTo メソッド

定義

データを特定のエンドポイントに送信します。Sends data to a specific endpoint.

オーバーロード

SendTo(Byte[], EndPoint)

指定したエンドポイントにデータを送信します。Sends data to the specified endpoint.

SendTo(Byte[], SocketFlags, EndPoint)

指定した SocketFlags を使用して、特定のエンドポイントにデータを送信します。Sends data to a specific endpoint using the specified SocketFlags.

SendTo(Byte[], Int32, SocketFlags, EndPoint)

指定した SocketFlags を使用し、指定したバイト数のデータを、指定したエンドポイントに送信します。Sends the specified number of bytes of data to the specified endpoint using the specified SocketFlags.

SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)

指定した SocketFlags を使用し、指定したバイト数のデータを、指定したエンドポイントに送信します。送信はバッファー内の指定した位置から開始されます。Sends the specified number of bytes of data to the specified endpoint, starting at the specified location in the buffer, and using the specified SocketFlags.

SendTo(Byte[], EndPoint)

指定したエンドポイントにデータを送信します。Sends data to the specified endpoint.

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

パラメーター

buffer
Byte[]

送信されるデータを含む Byte 型の配列。An array of type Byte that contains the data to be sent.

remoteEP
EndPoint

データの送信先を表す EndPointThe EndPoint that represents the destination for the data.

戻り値

送信されたバイト数。The number of bytes sent.

例外

buffernull です。buffer is null.

- または --or- remoteEPnull です。remoteEP is null.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

Socket が閉じられました。The Socket has been closed.

次のコード例では、指定したリモートホストにコネクションレスのデータグラムを送信します。The following code example sends a connectionless datagram to the specified remote host.

static void SendTo1()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );

   array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
   Console::WriteLine( "Sending data." );
   // This call blocks. 
   s->SendTo( msg, endPoint );
   s->Close();
}
public static void SendTo1()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);
  
    byte[] msg = Encoding.ASCII.GetBytes("This is a test");
    Console.WriteLine("Sending data.");
    // This call blocks. 
    s.SendTo(msg, endPoint);
    s.Close();
}
Public Shared Sub SendTo1() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
    Console.WriteLine("Sending data.")
    ' This call blocks. 
    s.SendTo(msg, endPoint)
    s.Close()

End Sub

注釈

このオーバーロードでは、バッファーオフセットの既定値は0、既定値を送信するバイト数は buffer パラメーターのサイズ、SocketFlags 値の既定値は0です。In this overload, the buffer offset defaults to 0, the number of bytes to send defaults to the size of the buffer parameter, and the SocketFlags value defaults to 0.

コネクションレスプロトコルを使用している場合は、SendToを呼び出す前に、Connect メソッドを使用して既定のリモートホストを確立する必要はありません。If you are using a connectionless protocol, you do not need to establish a default remote host with the Connect method prior to calling SendTo. この操作は、Send メソッドを呼び出す場合にのみ必要です。You only need to do this if you intend to call the Send method. SendToを呼び出す前に Connect メソッドを呼び出すと、remoteEP パラメーターによって、その送信操作に対して指定された既定のリモートホストが上書きされます。If you do call the Connect method prior to calling SendTo, the remoteEP parameter will override the specified default remote host for that send operation only. 基になるサービスプロバイダーによって最も適切なローカルネットワークアドレスとポート番号が割り当てられるため、Bind メソッドを呼び出す必要もありません。You are also not required to call the Bind method, because the underlying service provider will assign the most appropriate local network address and port number. 割り当てられたローカルネットワークアドレスとポート番号を識別する必要がある場合は、SendTo メソッドが正常に完了した後に、LocalEndPoint プロパティを使用できます。If you need to identify the assigned local network address and port number, you can use the LocalEndPoint property after the SendTo method successfully completes.

コネクションレスプロトコルを対象としていますが、SendTo 接続指向プロトコルでも動作します。Although intended for connectionless protocols, SendTo also works with connection-oriented protocols. 接続指向プロトコルを使用している場合は、最初に Connect メソッドを呼び出すか、Accept メソッドを使用して受信接続要求を受け入れることによって、リモートホスト接続を確立する必要があります。If you are using a connection-oriented protocol, you must first establish a remote host connection by calling the Connect method or accept an incoming connection request using the Accept method. リモートホスト接続を確立していない場合、または受け入れない場合は、SendTo によって SocketExceptionがスローされます。If you do not establish or accept a remote host connection, SendTo will throw a SocketException. SendTo メソッドを呼び出す前に、コネクションレスプロトコルの既定のリモートホストを確立することもできます。You can also establish a default remote host for a connectionless protocol prior to calling the SendTo method. どちらの場合も、SendToremoteEP パラメーターを無視し、接続されているまたは既定のリモートホストにのみデータを送信します。In either of these cases, SendTo will ignore the remoteEP parameter and only send data to the connected or default remote host.

ブロックソケットは、バッファー内のすべてのバイトが送信されるまでブロックされます。Blocking sockets will block until the all of the bytes in the buffer are sent. 非ブロッキング Socket はすぐに完了するため、buffer内のすべてのバイトが送信されるとは限りません。Since a nonblocking Socket completes immediately, it might not send all of the bytes in the buffer. アプリケーションは、送信されたバイト数を追跡し、アプリケーションが buffer内のすべてのバイトを送信するまで操作を再試行する必要があります。It is your application's responsibility to keep track of the number of bytes sent and to retry the operation until the application sends all of the bytes in the buffer. また、送信したデータがネットワークに直ちに表示される保証もありません。There is also no guarantee that the data you send will appear on the network immediately. ネットワークの効率を向上させるために、基になるシステムは、大量の送信データが収集されるまで転送を遅らせます。To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. SendTo メソッドが正常に完了すると、基になるシステムにネットワーク送信用のデータをバッファーするための余裕があることを意味します。A successful completion of the SendTo method means that the underlying system has had room to buffer your data for a network send.

ブロックモードでコネクションレスプロトコルを使用している場合、SendTo はデータグラムが送信されるまでブロックされます。If you are using a connectionless protocol in blocking mode, SendTo will block until the datagram is sent. ブロードキャストアドレスにデータを送信する場合は、最初に SetSocketOption メソッドを呼び出し、socket オプションを SocketOptionName.Broadcastに設定する必要があります。If you want to send data to a broadcast address, you must first call the SetSocketOption method and set the socket option to SocketOptionName.Broadcast. また、送信されたバイト数が、基になるサービスプロバイダーの最大パケットサイズを超えていないことを確認する必要があります。You must also be sure that the number of bytes sent does not exceed the maximum packet size of the underlying service provider. この場合、データグラムは送信されず、SendTo によって SocketExceptionがスローされます。If it does, the datagram will not be sent and SendTo will throw a SocketException.

注意

SocketExceptionを受け取った場合は、SocketException.ErrorCode プロパティを使用して、特定のエラーコードを取得します。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得したら、 Windows Sockets version 2 API エラーコードのドキュメントを参照して、エラーの詳細な説明を参照してください。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、「 .NET Framework のネットワークトレース」を参照してください。For more information, see Network Tracing in the .NET Framework.

こちらもご覧ください

SendTo(Byte[], SocketFlags, EndPoint)

指定した SocketFlags を使用して、特定のエンドポイントにデータを送信します。Sends data to a specific endpoint using the specified SocketFlags.

public:
 int SendTo(cli::array <System::Byte> ^ buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public int SendTo (byte[] buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendTo : byte[] * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> int

パラメーター

buffer
Byte[]

送信されるデータを含む Byte 型の配列。An array of type Byte that contains the data to be sent.

socketFlags
SocketFlags

SocketFlags 値のビットごとの組み合わせ。A bitwise combination of the SocketFlags values.

remoteEP
EndPoint

データの送信先の位置を表す EndPointThe EndPoint that represents the destination location for the data.

戻り値

送信されたバイト数。The number of bytes sent.

例外

buffernullです。buffer is null.

- または --or- remoteEPnullです。remoteEP is null.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

Socket が閉じられました。The Socket has been closed.

次のコード例では、指定したリモートホストにコネクションレスのデータグラムを送信します。The following code example sends a connectionless datagram to the specified remote host. SocketFlagsSendTo メソッドに渡されます。SocketFlags are passed to the SendTo method.

static void SendTo2()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );

   array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
   Console::WriteLine( "Sending data." );
   // This call blocks. 
   s->SendTo( msg, SocketFlags::None, endPoint );
   s->Close();
}
public static void SendTo2()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);
  
    byte[] msg = Encoding.ASCII.GetBytes("This is a test");
    Console.WriteLine("Sending data.");
    // This call blocks. 
    s.SendTo(msg, SocketFlags.None, endPoint);
    s.Close();
}
Public Shared Sub SendTo2() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
    Console.WriteLine("Sending data.")
    ' This call blocks. 
    s.SendTo(msg, SocketFlags.None, endPoint)
    s.Close()

End Sub

注釈

このオーバーロードでは、バッファーオフセットは既定で0に設定され、送信するバイト数は既定で bufferのサイズに設定されます。In this overload, the buffer offset defaults to 0, and the number of bytes to send defaults to the size of the buffer. DontRoute フラグを socketflags パラメーターとして指定した場合、送信しようとしているデータはルーティングされません。If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

コネクションレスプロトコルを使用している場合は、SendToを呼び出す前に、Connect メソッドを使用して既定のリモートホストを確立する必要はありません。If you are using a connectionless protocol, you do not need to establish a default remote host with the Connect method prior to calling SendTo. この操作は、Send メソッドを呼び出す場合にのみ必要です。You only need to do this if you intend to call the Send method. SendToを呼び出す前に Connect メソッドを呼び出すと、remoteEP パラメーターによって、その送信操作に対して指定された既定のリモートホストが上書きされます。If you do call the Connect method prior to calling SendTo, the remoteEP parameter will override the specified default remote host for that send operation only. 基になるサービスプロバイダーによって最も適切なローカルネットワークアドレスとポート番号が割り当てられるため、Bind メソッドを呼び出す必要もありません。You are also not required to call the Bind method, because the underlying service provider will assign the most appropriate local network address and port number. 割り当てられたローカルネットワークアドレスとポート番号を識別する必要がある場合は、SendTo メソッドが正常に完了した後に、LocalEndPoint プロパティを使用できます。If you need to identify the assigned local network address and port number, you can use the LocalEndPoint property after the SendTo method successfully completes.

コネクションレスプロトコルを対象としていますが、SendTo 接続指向プロトコルでも動作します。Although intended for connectionless protocols, SendTo also works with connection-oriented protocols. 接続指向プロトコルを使用している場合は、最初に Connect メソッドを呼び出すか、Accept メソッドを使用して受信接続要求を受け入れることによって、リモートホスト接続を確立する必要があります。If you are using a connection-oriented protocol, you must first establish a remote host connection by calling the Connect method or accept an incoming connection request using the Accept method. リモートホスト接続を確立していない場合、または受け入れない場合は、SendTo によって SocketExceptionがスローされます。If you do not establish or accept a remote host connection, SendTo will throw a SocketException. SendTo メソッドを呼び出す前に、コネクションレスプロトコルの既定のリモートホストを確立することもできます。You can also establish a default remote host for a connectionless protocol prior to calling the SendTo method. どちらの場合も、SendToremoteEP パラメーターを無視し、接続されているまたは既定のリモートホストにのみデータを送信します。In either of these cases, SendTo will ignore the remoteEP parameter and only send data to the connected or default remote host.

ブロックソケットは、要求されたが buffer 内のすべてのバイトを送信するまでブロックされます。Blocking sockets will block until the requested all of the bytes in the buffer are sent. 非ブロッキング Socket はすぐに完了するため、buffer内のすべてのバイトが送信されるとは限りません。Since a nonblocking Socket completes immediately, it might not send all of the bytes in the buffer. アプリケーションは、送信されたバイト数を追跡し、アプリケーションが buffer内のすべてのバイトを送信するまで操作を再試行する必要があります。It is your application's responsibility to keep track of the number of bytes sent and to retry the operation until the application sends all of the bytes in the buffer. また、送信したデータがネットワークに直ちに表示される保証もありません。There is also no guarantee that the data you send will appear on the network immediately. ネットワークの効率を高めるため、基になるシステムは、大量のデータが収集されるまで転送を遅らせます。To increase network efficiency, the underlying system may delay transmission until a significant amount of out-going data is collected. SendTo メソッドが正常に完了すると、基になるシステムにネットワーク送信用のデータをバッファーするための余裕があることを意味します。A successful completion of the SendTo method means that the underlying system has had room to buffer your data for a network send.

ブロックモードでコネクションレスプロトコルを使用している場合、SendTo はデータグラムが送信されるまでブロックされます。If you are using a connectionless protocol in blocking mode, SendTo will block until the datagram is sent. ブロードキャストアドレスにデータを送信する場合は、最初に SetSocketOption メソッドを呼び出し、socket オプションを SocketOptionName.Broadcastに設定する必要があります。If you want to send data to a broadcast address, you must first call the SetSocketOption method and set the socket option to SocketOptionName.Broadcast. また、送信されたバイト数が、基になるサービスプロバイダーの最大パケットサイズを超えていないことを確認する必要があります。You must also be sure that the number of bytes sent does not exceed the maximum packet size of the underlying service provider. この場合、データグラムは送信されず、SendTo によって SocketExceptionがスローされます。If it does, the datagram will not be sent and SendTo will throw a SocketException.

注意

SocketExceptionを受け取った場合は、SocketException.ErrorCode プロパティを使用して、特定のエラーコードを取得します。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得したら、 Windows Sockets version 2 API エラーコードのドキュメントを参照して、エラーの詳細な説明を参照してください。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、「 .NET Framework のネットワークトレース」を参照してください。For more information, see Network Tracing in the .NET Framework.

こちらもご覧ください

SendTo(Byte[], Int32, SocketFlags, EndPoint)

指定した SocketFlags を使用し、指定したバイト数のデータを、指定したエンドポイントに送信します。Sends the specified number of bytes of data to the specified endpoint using the specified SocketFlags.

public:
 int SendTo(cli::array <System::Byte> ^ buffer, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public int SendTo (byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendTo : byte[] * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> int

パラメーター

buffer
Byte[]

送信されるデータを含む Byte 型の配列。An array of type Byte that contains the data to be sent.

size
Int32

送信するバイト数。The number of bytes to send.

socketFlags
SocketFlags

SocketFlags 値のビットごとの組み合わせ。A bitwise combination of the SocketFlags values.

remoteEP
EndPoint

データの送信先の位置を表す EndPointThe EndPoint that represents the destination location for the data.

戻り値

送信されたバイト数。The number of bytes sent.

例外

buffernull です。buffer is null.

- または --or- remoteEPnull です。remoteEP is null.

指定した sizebuffer のサイズを超えています。The specified size exceeds the size of buffer.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

Socket が閉じられました。The Socket has been closed.

次のコード例では、指定したリモートホストにコネクションレスのデータグラムを送信します。The following code example sends a connectionless datagram to the specified remote host. サイズと SocketFlagsSendTo メソッドに渡されます。The size and SocketFlags are passed to the SendTo method.

static void SendTo3()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );

   array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
   Console::WriteLine( "Sending data." );
   // This call blocks. 
   s->SendTo( msg, msg->Length, SocketFlags::None, endPoint );
   s->Close();
}
public static void SendTo3()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);
  
    byte[] msg = Encoding.ASCII.GetBytes("This is a test");
    Console.WriteLine("Sending data.");
    // This call blocks. 
    s.SendTo(msg, msg.Length, SocketFlags.None, endPoint);
    s.Close();
}
Public Shared Sub SendTo3() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
    Console.WriteLine("Sending data.")
    ' This call blocks. 
    s.SendTo(msg, msg.Length, SocketFlags.None, endPoint)
    s.Close()

End Sub

注釈

このオーバーロードでは、バッファーオフセットは既定で0に設定されます。In this overload, the buffer offset defaults to 0. DontRoute フラグを socketflags パラメーターとして指定した場合、送信しようとしているデータはルーティングされません。If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

コネクションレスプロトコルを使用している場合は、SendToを呼び出す前に、Connect メソッドを使用して既定のリモートホストを確立する必要はありません。If you are using a connectionless protocol, you do not need to establish a default remote host with the Connect method prior to calling SendTo. この操作は、Send メソッドを呼び出す場合にのみ必要です。You only need to do this if you intend to call the Send method. SendToを呼び出す前に Connect メソッドを呼び出すと、remoteEP パラメーターによって、その送信操作に対して指定された既定のリモートホストが上書きされます。If you do call the Connect method prior to calling SendTo, the remoteEP parameter will override the specified default remote host for that send operation only. 基になるサービスプロバイダーによって最も適切なローカルネットワークアドレスとポート番号が割り当てられるため、Bind メソッドを呼び出す必要もありません。You are also not required to call the Bind method, because the underlying service provider will assign the most appropriate local network address and port number. 割り当てられたローカルネットワークアドレスとポート番号を識別する必要がある場合は、SendTo メソッドが正常に完了した後に、LocalEndPoint プロパティを使用できます。If you need to identify the assigned local network address and port number, you can use the LocalEndPoint property after the SendTo method successfully completes.

コネクションレスプロトコルを対象としていますが、SendTo 接続指向プロトコルでも動作します。Although intended for connectionless protocols, SendTo also works with connection-oriented protocols. 接続指向プロトコルを使用している場合は、最初に Connect メソッドを呼び出すか、Accept メソッドを使用して受信接続要求を受け入れることによって、リモートホスト接続を確立する必要があります。If you are using a connection-oriented protocol, you must first establish a remote host connection by calling the Connect method or accept an incoming connection request using the Accept method. リモートホスト接続を確立していない場合、または受け入れない場合は、SendTo によって SocketExceptionがスローされます。If you do not establish or accept a remote host connection, SendTo will throw a SocketException. SendTo メソッドを呼び出す前に、コネクションレスプロトコルの既定のリモートホストを確立することもできます。You can also establish a default remote host for a connectionless protocol prior to calling the SendTo method. どちらの場合も、SendToremoteEP パラメーターを無視し、接続されているまたは既定のリモートホストにのみデータを送信します。In either of these cases, SendTo will ignore the remoteEP parameter and only send data to the connected or default remote host.

ブロックされたソケットは、要求されたバイト数が送信されるまでブロックされます。Blocking sockets will block until the requested number of bytes are sent. 非ブロッキング Socket はすぐに完了するため、1回の操作で要求されたバイト数がすべて送信されるとは限りません。Since a nonblocking Socket completes immediately, it might not send all of the bytes requested in a single operation. アプリケーションは、送信されたバイト数を追跡し、要求されたバイト数をアプリケーションが送信するまで操作を再試行する必要があります。It is your application's responsibility to keep track of the number of bytes sent and to retry the operation until the application sends the requested number of bytes. また、送信したデータがネットワークに直ちに表示される保証もありません。There is also no guarantee that the data you send will appear on the network immediately. ネットワークの効率を高めるため、基になるシステムは、大量のデータが収集されるまで転送を遅らせます。To increase network efficiency, the underlying system may delay transmission until a significant amount of out-going data is collected. SendTo メソッドが正常に完了すると、基になるシステムにネットワーク送信用のデータをバッファーするための余裕があることを意味します。A successful completion of the SendTo method means that the underlying system has had room to buffer your data for a network send.

ブロックモードでコネクションレスプロトコルを使用している場合、SendTo はデータグラムが送信されるまでブロックされます。If you are using a connectionless protocol in blocking mode, SendTo will block until the datagram is sent. ブロードキャストアドレスにデータを送信する場合は、最初に SetSocketOption メソッドを呼び出し、socket オプションを SocketOptionName.Broadcastに設定する必要があります。If you want to send data to a broadcast address, you must first call the SetSocketOption method and set the socket option to SocketOptionName.Broadcast. また、送信されたバイト数が、基になるサービスプロバイダーの最大パケットサイズを超えていないことを確認する必要があります。You must also be sure that the number of bytes sent does not exceed the maximum packet size of the underlying service provider. この場合、データグラムは送信されず、SendTo によって SocketExceptionがスローされます。If it does, the datagram will not be sent and SendTo will throw a SocketException.

注意

SocketExceptionを受け取った場合は、SocketException.ErrorCode プロパティを使用して、特定のエラーコードを取得します。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得したら、 Windows Sockets version 2 API エラーコードのドキュメントを参照して、エラーの詳細な説明を参照してください。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、「 .NET Framework のネットワークトレース」を参照してください。For more information, see Network Tracing in the .NET Framework.

こちらもご覧ください

SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)

指定した SocketFlags を使用し、指定したバイト数のデータを、指定したエンドポイントに送信します。送信はバッファー内の指定した位置から開始されます。Sends the specified number of bytes of data to the specified endpoint, starting at the specified location in the buffer, and using the specified SocketFlags.

public:
 int SendTo(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public int SendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> int

パラメーター

buffer
Byte[]

送信されるデータを含む Byte 型の配列。An array of type Byte that contains the data to be sent.

offset
Int32

データの送信を開始する、データ バッファー内の位置。The position in the data buffer at which to begin sending data.

size
Int32

送信するバイト数。The number of bytes to send.

socketFlags
SocketFlags

SocketFlags 値のビットごとの組み合わせ。A bitwise combination of the SocketFlags values.

remoteEP
EndPoint

データの送信先の位置を表す EndPointThe EndPoint that represents the destination location for the data.

戻り値

送信されたバイト数。The number of bytes sent.

例外

buffernullです。buffer is null.

- または --or- remoteEPnull です。remoteEP is null.

offset が 0 未満です。offset is less than 0.

- または --or- offsetbuffer の長さを超えています。offset is greater than the length of buffer.

- または --or- size が 0 未満です。size is less than 0.

- または --or- size が、buffer の長さから offset パラメーターの値を引いた値を超えています。size is greater than the length of buffer minus the value of the offset parameter.

socketFlags は、値の有効な組み合わせではありません。socketFlags is not a valid combination of values.

- または --or- Socket にアクセス中にオペレーティング システム エラーが発生しました。An operating system error occurs while accessing the Socket.

Socket が閉じられました。The Socket has been closed.

コール スタック内の呼び出し元が、必要なアクセス許可を保持していません。A caller in the call stack does not have the required permissions.

次のコード例では、指定したリモートホストにコネクションレスのデータグラムを送信します。The following code example sends a connectionless datagram to the specified remote host. オフセット、サイズ、および SocketFlagsSendTo メソッドに渡されます。The offset, size, and SocketFlags are passed to the SendTo method.

static void SendTo4()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );

   array<Byte>^ msg = Encoding::ASCII->GetBytes( "This is a test" );
   Console::WriteLine( "Sending data." );
   // This call blocks. 
   s->SendTo( msg, 0, msg->Length, SocketFlags::None, endPoint );
   s->Close();
}
public static void SendTo4()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);
  
    byte[] msg = Encoding.ASCII.GetBytes("This is a test");
    Console.WriteLine("Sending data.");
    // This call blocks. 
    s.SendTo(msg, 0, msg.Length, SocketFlags.None, endPoint);
    s.Close();
}

Public Shared Sub SendTo4() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    Dim msg As Byte() = Encoding.ASCII.GetBytes("This is a test")
    Console.WriteLine("Sending data.")
    ' This call blocks. 
    s.SendTo(msg, 0, msg.Length, SocketFlags.None, endPoint)
    s.Close()

End Sub


注釈

このオーバーロードでは、DontRoute フラグを socketflags パラメーターとして指定した場合、送信するデータはルーティングされません。In this overload, if you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

コネクションレスプロトコルを使用している場合は、SendToを呼び出す前に、Connect メソッドを使用して既定のリモートホストを確立する必要はありません。If you are using a connectionless protocol, you do not need to establish a default remote host with the Connect method prior to calling SendTo. この操作は、Send メソッドを呼び出す場合にのみ必要です。You only need to do this if you intend to call the Send method. SendToを呼び出す前に Connect メソッドを呼び出すと、remoteEP パラメーターによって、その送信操作に対して指定された既定のリモートホストが上書きされます。If you do call the Connect method prior to calling SendTo, the remoteEP parameter will override the specified default remote host for that send operation only. 基になるサービスプロバイダーによって最も適切なローカルネットワークアドレスとポート番号が割り当てられるため、Bind メソッドを呼び出す必要もありません。You are also not required to call the Bind method, because the underlying service provider will assign the most appropriate local network address and port number. 割り当てられたローカルネットワークアドレスとポート番号を識別する必要がある場合は、SendTo メソッドが正常に完了した後に、LocalEndPoint プロパティを使用できます。If you need to identify the assigned local network address and port number, you can use the LocalEndPoint property after the SendTo method successfully completes.

コネクションレスプロトコルを対象としていますが、SendTo 接続指向プロトコルでも動作します。Although intended for connectionless protocols, SendTo also works with connection-oriented protocols. 接続指向プロトコルを使用している場合は、最初に Connect メソッドを呼び出すか、Accept メソッドを使用して受信接続要求を受け入れることによって、リモートホスト接続を確立する必要があります。If you are using a connection-oriented protocol, you must first establish a remote host connection by calling the Connect method or accept an incoming connection request using the Accept method. リモートホスト接続を確立していない場合、または受け入れない場合は、SendTo によって SocketExceptionがスローされます。If you do not establish or accept a remote host connection, SendTo will throw a SocketException. SendTo メソッドを呼び出す前に、コネクションレスプロトコルの既定のリモートホストを確立することもできます。You can also establish a default remote host for a connectionless protocol prior to calling the SendTo method. どちらの場合も、SendToremoteEP パラメーターを無視し、接続されているまたは既定のリモートホストにのみデータを送信します。In either of these cases, SendTo will ignore the remoteEP parameter and only send data to the connected or default remote host.

ブロックされたソケットは、要求されたバイト数が送信されるまでブロックされます。Blocking sockets will block until the requested number of bytes are sent. 非ブロッキング Socket はすぐに完了するため、1回の操作で要求されたバイト数がすべて送信されるとは限りません。Since a non-blocking Socket completes immediately, it might not send all of the bytes requested in a single operation. アプリケーションは、送信されたバイト数を追跡し、要求されたバイト数をアプリケーションが送信するまで操作を再試行する必要があります。It is your applications responsibility to keep track of the number of bytes sent and to retry the operation until the application sends the requested number of bytes. また、送信したデータがネットワークに直ちに表示される保証もありません。There is also no guarantee that the data you send will appear on the network immediately. ネットワークの効率を高めるため、基になるシステムは、大量のデータが収集されるまで転送を遅らせます。To increase network efficiency, the underlying system may delay transmission until a significant amount of out-going data is collected. SendTo メソッドが正常に完了すると、基になるシステムにネットワーク送信用のデータをバッファーするための余裕があることを意味します。A successful completion of the SendTo method means that the underlying system has had room to buffer your data for a network send.

ブロックモードでコネクションレスプロトコルを使用している場合、SendTo はデータグラムが送信されるまでブロックされます。If you are using a connectionless protocol in blocking mode, SendTo will block until the datagram is sent. ブロードキャストアドレスにデータを送信する場合は、最初に SetSocketOption メソッドを呼び出し、socket オプションを SocketOptionName.Broadcastに設定する必要があります。If you want to send data to a broadcast address, you must first call the SetSocketOption method and set the socket option to SocketOptionName.Broadcast. また、サイズが基になるサービスプロバイダーの最大パケットサイズを超えていないことを確認する必要もあります。You must also be sure that the size does not exceed the maximum packet size of the underlying service provider. この場合、データグラムは送信されず、SendTo によって SocketExceptionがスローされます。If it does, the datagram will not be sent and SendTo will throw a SocketException.

注意

SocketExceptionを受け取った場合は、SocketException.ErrorCode プロパティを使用して、特定のエラーコードを取得します。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得したら、 Windows Sockets version 2 API エラーコードのドキュメントを参照して、エラーの詳細な説明を参照してください。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、「 .NET Framework のネットワークトレース」を参照してください。For more information, see Network Tracing in the .NET Framework.

こちらもご覧ください

適用対象