次の方法で共有


NetworkStream.BeginRead メソッド

NetworkStream からの非同期の読み取りを開始します。

Overrides Public Function BeginRead( _
   ByVal buffer() As Byte, _   ByVal offset As Integer, _   ByVal size As Integer, _   ByVal callback As AsyncCallback, _   ByVal state As Object _) As IAsyncResult
[C#]
public override IAsyncResult BeginRead(byte[] buffer,intoffset,intsize,AsyncCallbackcallback,objectstate);
[C++]
public: IAsyncResult* BeginRead(unsigned charbuffer __gc[],intoffset,intsize,AsyncCallback* callback,Object* state);
[JScript]
public override function BeginRead(
   buffer : Byte[],offset : int,size : int,callback : AsyncCallback,state : Object) : IAsyncResult;

パラメータ

  • buffer
    Byte 型の配列。 NetworkStream から読み取られたデータを格納するメモリ内の場所です。
  • offset
    データの格納を開始する buffer 内の場所。
  • size
    NetworkStream から読み取るバイト数。
  • callback
    BeginRead の完了時に実行される AsyncCallback デリゲート。
  • state
    追加のユーザー定義のデータを格納するオブジェクト。

戻り値

非同期呼び出しを表す IAsyncResult

例外

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

または

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

または

size が 0 未満です。

または

size が、 buffer の長さから offset パラメータの値を引いた値を超えています。

IOException 基になっている Socket が閉じています。

または

ネットワークからの読み取り中にエラーが発生しました。

ObjectDisposedException NetworkStream が閉じています。
IOException ソケットへのアクセス中にエラーが発生しました。詳細については「解説」を参照してください。

解説

BeginRead メソッドは受信ネットワーク バッファからの非同期のデータ読み取りを開始します。 BeginRead メソッドを呼び出すと、個別の実行スレッド内でデータを受信できます。

AsyncCallback デリゲートを実装するコールバック メソッドを作成し、その名前を BeginRead メソッドに渡す必要があります。使用する state パラメータは、少なくとも NetworkStream を格納している必要があります。コールバック メソッド内で受信データを取得しなければならないため、読み取りバッファなどの有用な情報を保持するための小さなクラスまたは構造体を作成する必要があります。構造体またはクラスのインスタンスは、 state パラメータを使用して BeginRead メソッドに渡します。

コールバック メソッドは EndRead メソッドを実装する必要があります。アプリケーションが BeginRead を呼び出すと、指定したコールバック メソッドが個別のスレッドを使用して実行され、 EndRead は、指定した NetworkStream がデータを読み取るか例外をスローするまでブロックします。 BeginRead メソッドを呼び出してから元のスレッドをブロックする場合は、 WaitOne を使用します。元のスレッドの実行を継続させるには、コールバック メソッドで Set を呼び出します。コールバック メソッドの記述に関する追加情報については、「 Callback のサンプル 」を参照してください。

BeginRead メソッドは、 size パラメータで指定したバイト数までの、使用可能なデータをすべて読み取ります。

メモ    IOException が発生した場合は、 InnerException プロパティの値を見ることによって、この原因が SocketException かどうかを確認してください。その場合、 ErrorCode を使用して特定のエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのマニュアルから、エラーの詳細情報を確認できます。これは MSDN から入手できます。

使用例

[Visual Basic, C#, C++] BeginRead を使用して、ネットワーク ストリームから非同期的にデータを読み取る例を次に示します。 myReadCallBack メソッドは AsyncCallback デリゲートを実装しており、 BeginRead の終了時に呼び出されます。

 
' Check to see if this NetworkStream is readable.
If myNetworkStream.CanRead Then
   
   Dim myReadBuffer(1024) As Byte
   myNetworkStream.BeginRead(myReadBuffer, 0, myReadBuffer.Length, New AsyncCallback(AddressOf NetworkStream_ASync_Send_Receive.myReadCallBack), myNetworkStream)
   
   allDone.WaitOne()
Else
   Console.WriteLine("Sorry.  You cannot read from this NetworkStream.")
End If


[C#] 

// Check to see if this NetworkStream is readable.
if(myNetworkStream.CanRead){
    
    byte[] myReadBuffer = new byte[1024];
    myNetworkStream.BeginRead(myReadBuffer, 0, myReadBuffer.Length, 
                                                 new AsyncCallback(NetworkStream_ASync_Send_Receive.myReadCallBack), 
                                                 myNetworkStream);  

    allDone.WaitOne();
}
else{
     Console.WriteLine("Sorry.  You cannot read from this NetworkStream.");
}


[C++] 

// Check to see if this NetworkStream is readable.
if (myNetworkStream->CanRead) {
    Byte myReadBuffer[] = new Byte[1024];
    myNetworkStream->BeginRead(myReadBuffer, 0, myReadBuffer->Length, 
        new AsyncCallback(0, &MyNetworkStreamClass::myReadCallBack), 
        myNetworkStream);  
    allDone->WaitOne();
} else {
    Console::WriteLine(S"Sorry.  You cannot read from this NetworkStream.");
}

[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

参照

NetworkStream クラス | NetworkStream メンバ | System.Net.Sockets 名前空間 | EndRead | 非同期呼び出しの組み込み