次の方法で共有


NetworkStream.Read メソッド

NetworkStream からデータを読み取ります。

Overrides Public Function Read( _
   <InteropServices.In(), _
   Out()> ByVal buffer() As Byte, _   ByVal offset As Integer, _   ByVal size As Integer _) As Integer
[C#]
public override int Read(   [   In,   Out] byte[] buffer,intoffset,intsize);
[C++]
public: int Read(   [   In,   Out] unsigned charbuffer __gc[],intoffset,intsize);
[JScript]
public override function Read(
   buffer : Byte[],offset : int,size : int) : int;

パラメータ

  • buffer
    Byte 型の配列。 NetworkStream から読み取られたデータを格納するメモリ内の場所です。
  • offset
    データの格納を開始する buffer 内の場所。
  • size
    NetworkStream から読み取るバイト数。

戻り値

NetworkStream から読み取るバイト数。

例外

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

または

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

または

size が 0 未満です。

または

size が、 buffer の長さから offset パラメータの値を引いたものより小さい値です。

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

または

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

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

解説

このメソッドは、データを buffer パラメータに読み込み、正常に読み込まれたバイト数を返します。読み取ることができるデータが存在しない場合、 NetworkStream.Read メソッドは読み取ることができるデータが出現するまでブロックします。ブロックしない場合は、 DataAvailable プロパティを使用して、読み取り用の受信ネットワーク バッファ内のキューにデータが置かれているかどうかを確認します。 DataAvailabletrue を返した場合、 Read の操作はすぐに完了します。 Read 操作は、 size パラメータで指定したバイト数までの、使用可能なデータをすべて読み取ります。リモート ホストが接続をシャットダウンし、使用できるデータがすべて受信されると、 Read メソッドはすぐに完了して、0 バイトを返します。

メモ    CanRead を呼び出して、 NetworkStream が読み取り可能かどうかを確認します。読み取ることができない NetworkStream からデータを読み取ろうとすると、 IOException が発生します。

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

使用例

[Visual Basic, C#, C++] DataAvailable を使用し、読み取り対象のデータがあるかどうかを確認する例を次に示します。データがある場合は、 NetworkStream から読み取ります。

 
' Check to see if this NetworkStream is readable.
If myNetworkStream.CanRead Then
   Dim myReadBuffer(1024) As Byte
   Dim myCompleteMessage As [String] = ""
   Dim numberOfBytesRead As Integer = 0
   
   ' Incoming message may be larger than the buffer size.
   Do
      numberOfBytesRead = myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length)
      myCompleteMessage = [String].Concat(myCompleteMessage, Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead))
   Loop While myNetworkStream.DataAvailable
   
   ' Print out the received message to the console.
   Console.WriteLine(("You received the following message : " + myCompleteMessage))
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];
     String myCompleteMessage = "";
     int numberOfBytesRead = 0;

     // Incoming message may be larger than the buffer size.
     do{
          numberOfBytesRead = myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length);  
          myCompleteMessage = 
              String.Concat(myCompleteMessage, Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead));  
     }
     while(myNetworkStream.DataAvailable);

     // Print out the received message to the console.
     Console.WriteLine("You received the following message : " +
                                  myCompleteMessage);
 }
 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];
            String* myCompleteMessage = S"";
            int numberOfBytesRead = 0;

            // Incoming message may be larger than the buffer size.
            do{
                numberOfBytesRead = myNetworkStream->Read(myReadBuffer, 0, myReadBuffer->Length);  
                myCompleteMessage = 
                    String::Concat(myCompleteMessage, Encoding::ASCII->GetString(myReadBuffer, 0, numberOfBytesRead));  
            } while (myNetworkStream->DataAvailable);

            // Print out the received message to the console.
            Console::WriteLine(S"You received the following message : {0}", myCompleteMessage);
        } 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 名前空間 | Receive | ネットワークでのストリームの使用 | DataAvailable | CanRead