次の方法で共有


Socket.Send メソッド (Byte[])

接続された Socket にデータを送信します。

Overloads Public Function Send( _
   ByVal buffer() As Byte _) As Integer
[C#]
public int Send(byte[] buffer);
[C++]
public: int Send(unsigned charbuffer __gc[]);
[JScript]
public function Send(
   buffer : Byte[]) : int;

パラメータ

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

戻り値

Socket に送信されたバイト数。

例外

例外の種類 条件
ArgumentNullException buffer が null 参照 (Visual Basic では Nothing) です。
SocketException ソケットへのアクセスを試みているときにエラーが発生しました。詳細については「解説」を参照してください。
ObjectDisposedException Socket は閉じられています。

解説

Send は、 Connect メソッドまたは Accept メソッドで指定されたリモート ホストに同期的にデータを送信し、正常に送信されたバイト数を返します。 Send はコネクション指向のプロトコルとコネクションレスのプロトコルの両方で使用できます。

このオーバーロードには、送信するデータを格納するバッファが必要です。 SocketFlags の既定値は 0、バッファのオフセットの既定値は 0 であり、送信するデータのバイト数の既定値はバッファのサイズです。

コネクションレスのプロトコルを使用している場合は、このメソッドを呼び出す前に Connect を呼び出す必要があります。これをしないと、 SendSocketException をスローします。コネクション指向のプロトコルを使用する場合は、 Connect を使用してリモート ホストとの接続を確立するか、 Accept を使用して受信接続を受け入れる必要があります。

コネクションレスのプロトコルを使用していて、複数の異なるホストにデータを送信する予定がある場合は、 SendTo メソッドを使用してください。 SendTo メソッドを使用しない場合は、 Send への各呼び出しの前に Connect を呼び出す必要があります。 SendTo は、 Connect で既定のリモート ホストを確立した後でも、使用できます。また、 Send の呼び出しの前に、 Connect を呼び出すことによって、既定のリモート ホストを変更できます。

コネクション指向のプロトコルを使用している場合、 Send は、バッファ内のすべてのバイトが送信されるまでブロックします。非ブロッキングモードでは、 Send が送信したバイト数がバッファ内のバイト数より小さくても、このメソッドは正常に完了します。送信されたバイト数を監視し、バッファ内のバイト数をすべて送信するまで操作を再試行することは、アプリケーション側の責任です。また、送信したデータがすぐにネットワーク上に現れることは保証されません。ネットワークの効率を高めるため、基になっているシステムは、十分な量の送信データが収集されるまで送信を遅延することがあります。 Send メソッドが正常に完了した場合は、基になるシステムにネットワーク送信のためにデータをバッファする余地があったことを示します。すべてのバイトをリモート ホストにすぐに送信することがアプリケーションの重要な要件の場合は、 SetSocketOption を使用して SocketOptionName.NoDelay を有効にすることができます。ネットワーク効率を高めるためのバッファの詳細については、MSDN の Nagle アルゴリズムを参照してください。

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

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

使用例

[Visual Basic, C#, C++] 接続された Socket にデータを送信する例を次に示します。

 
' Displays sending with a connected socket
' using the overload that takes a buffer.
Public Shared Function SendReceiveTest1(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


[C#] 
// 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;
}

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

[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.Send オーバーロードの一覧 | Connect | SendTo | SocketFlags | SetSocketOption