次の方法で共有


Socket.SendTo メソッド (Byte , EndPoint)

指定したエンドポイントにデータを送信します。

Overloads Public Function SendTo( _
   ByVal buffer() As Byte, _   ByVal remoteEP As EndPoint _) As Integer
[C#]
public int SendTo(byte[] buffer,EndPointremoteEP);
[C++]
public: int SendTo(unsigned charbuffer __gc[],EndPoint* remoteEP);
[JScript]
public function SendTo(
   buffer : Byte[],remoteEP : EndPoint) : int;

パラメータ

  • buffer
    送信するデータを格納する Byte 型の配列。
  • remoteEP
    データの送信先を表す EndPoint

戻り値

送信されたバイト数。

例外

例外の種類 条件
ArgumentNullException buffer が null 参照 (Visual Basic では Nothing) です。

または

remoteEP が null 参照 (Nothing) です。

SocketException ソケットへのアクセスを試みているときにエラーが発生しました。詳細については「解説」を参照してください。
ObjectDisposedException Socket は閉じられています。

解説

このオーバーロードでは、バッファのオフセットの既定値は 0、送信するデータのバイト数の既定値は buffer パラメータのサイズであり、 SocketFlags の既定値は 0 です。

コネクションレスのプロトコルを使用している場合は、 SendTo を呼び出す前に Connect メソッドで既定のリモート ホストを確立する必要がありません。これは、 Send メソッドを呼び出す場合にだけ必要です。 SendTo を呼び出す前に Connect を呼び出した場合、 remoteEP パラメータはその送信操作でだけ指定した既定のリモート ホストをオーバーライドします。また、 Bind メソッドを呼び出す必要はありません。基になるサービス プロバイダが最も適切なローカル ネットワーク アドレスとポート番号を割り当てるためです。割り当てられたローカル ネットワーク アドレスおよびポート番号を特定する必要がある場合は、 SendTo メソッドが正常に終了した後に LocalEndPoint プロパティを使用できます。

SendTo は、コネクションレスのプロトコルを想定していますが、コネクション指向のプロトコルでも使用できます。コネクション指向のプロトコルを使用する場合は、 Connect を呼び出してリモート ホストとの接続を確立するか、 Accept を使用して受信接続を受け入れる必要があります。リモート ホストとの接続を確立していないか、受け入れていない場合は、 SendToSocketException をスローします。また、 SendTo を呼び出す前に、コネクションレス プロトコルで既定のリモート ホストを確立することもできます。いずれの場合も、 SendToremoteEP パラメータを無視し、接続されているリモート ホストまたは既定のリモート ホストにだけデータを送信します。

ブロッキング ソケットは、バッファ内のすべてのバイトが送信されるまでブロックします。非ブロッキング Socket はすぐに完了するため、 buffer 内のバイトの一部が送信されない可能性があります。送信されたバイト数を監視し、 buffer 内のバイト数をすべて送信するまで操作を再試行することは、アプリケーション側の責任です。また、送信したデータがすぐにネットワーク上に現れることは保証されません。ネットワークの効率を高めるため、基になっているシステムは、十分な量の送信データが収集されるまで送信を遅延することがあります。 SendTo メソッドが正常に完了した場合は、基になるシステムにネットワーク送信のためにデータをバッファする余地があったことを示します。すべてのバイトをリモート ホストにすぐに送信することがアプリケーションの重要な要件の場合は、 SetSocketOption を使用して SocketOptionName.NoDelay を有効にすることができます。ネットワーク効率を高めるためのバッファの詳細については、MSDN の Nagle アルゴリズムを参照してください。コネクションレスのプロトコルをブロッキング モードで使用している場合、 SendTo はデータグラムが送信されるまでブロックします。データをブロードキャスト アドレスに送信する場合は、最初に SetSocketOption メソッドを呼び出し、ソケット オプションを SocketOptionName.Broadcast に設定する必要があります。また、送信するバイト数が、基になるサービス プロバイダの最大パケット サイズを超えないことを確認する必要があります。その場合、データグラムは送信されず、 SendToSocketException をスローします。

メモ    SocketException が発生した場合は、 SocketException.ErrorCode を使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのマニュアルから、エラーの詳細情報を確認できます。これは MSDN から入手できます。

.NET Compact Framework - Windows CE .NET プラットフォームに関する注意点: このメソッドで長さ 0 のデータを送信した場合の結果は、.NET Compact Framework ではなく、ネイティブ オペレーティング システムによって決まります。

使用例

[Visual Basic, C#, C++] 指定したリモート ホストに、コネクションレスのデータグラムを送信する例を次に示します。

 
Public Shared Sub SendTo1()
    Dim hostEntry As IPHostEntry = Dns.Resolve(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 'SendTo1


[C#] 
public static void SendTo1()
{
    IPHostEntry hostEntry = Dns.Resolve(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();
}

[C++] 
static void SendTo1()
{
    IPHostEntry* hostEntry = Dns::Resolve(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(S"This is a test");
    Console::WriteLine(S"Sending data.");
    // This call blocks. 
    s->SendTo(msg, endPoint);
    s->Close();
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Socket クラス | Socket メンバ | System.Net.Sockets 名前空間 | Socket.SendTo オーバーロードの一覧 | Connect | Bind | Send | SendTo | SetSocketOption | LocalEndPoint