SslStream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) メソッド

定義

指定したバッファーからストリームに Byteを書き込む非同期書き込み操作を開始します。

public:
 override IAsyncResult ^ BeginWrite(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ asyncCallback, System::Object ^ asyncState);
public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState);
override this.BeginWrite : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginWrite (buffer As Byte(), offset As Integer, count As Integer, asyncCallback As AsyncCallback, asyncState As Object) As IAsyncResult

パラメーター

buffer
Byte[]

ストリームに書き込まれるバイトを提供する Byte 配列。

offset
Int32

ストリームに書き込まれるバイトの読み取りを開始する buffer 内の 0 から始まる位置。

count
Int32

bufferから読み取るバイト数を指定するInt32値。

asyncCallback
AsyncCallback

書き込み操作が完了したときに呼び出すメソッドを参照する AsyncCallback デリゲート。

asyncState
Object

書き込み操作に関する情報を含むユーザー定義オブジェクト。 このオブジェクトは、操作の完了時に asyncCallback デリゲートに渡されます。

返品

非同期操作の状態を示す IAsyncResult オブジェクト。

例外

buffernullです。

offset が 0 未満です。

-または-

offsetbufferの長さを超えています。

-または-

offset + count が bufferの長さを超えています。

書き込み操作に失敗しました。

書き込み操作は既に進行中です。

このオブジェクトは閉じられています。

認証が行われません。

次のコード例は、このメソッドの呼び出しを示しています。

void ReadCallback(IAsyncResult ar)
{
    ClientState state = (ClientState) ar.AsyncState;
    SslStream stream = state.stream;
    // Read the  message sent by the client.
    // The end of the message is signaled using the
    // "<EOF>" marker.
    int byteCount = -1;
    try
    {
        Console.WriteLine("Reading data from the client.");
        byteCount = stream.EndRead(ar);
        // Use Decoder class to convert from bytes to UTF8
        // in case a character spans two buffers.
        Decoder decoder = Encoding.UTF8.GetDecoder();
        char[] chars = new char[decoder.GetCharCount(state.buffer,0, byteCount)];
        decoder.GetChars(state.buffer, 0, byteCount, chars,0);
        state.readData.Append (chars);
        // Check for EOF or an empty message.
        if (state.readData.ToString().IndexOf("<EOF>") == -1 && byteCount != 0)
        {
            // We are not finished reading.
            // Asynchronously read more message data from  the client.
            stream.BeginRead(state.buffer, 0, state.buffer.Length,
                new AsyncCallback(ReadCallback),
                state);
        }
        else
        {
            Console.WriteLine("Message from the client: {0}", state.readData.ToString());
        }

        // Encode a test message into a byte array.
        // Signal the end of the message using "<EOF>".
        byte[] message = Encoding.UTF8.GetBytes("Hello from the server.<EOF>");
        // Asynchronously send the message to the client.
        stream.BeginWrite(message, 0, message.Length,
            new AsyncCallback(WriteCallback),
            state);
    }
    catch (Exception readException)
    {
        Console.WriteLine("Read error: {0}", readException.Message);
        state.Close();
        return;
    }
}

適用対象