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 未満です。
または offset が buffer の長さを超えています。 または size が 0 未満です。 または size が、 buffer の長さから offset パラメータの値を引いたものより小さい値です。 |
IOException | 基になっている Socket が閉じています。 |
ObjectDisposedException | NetworkStream が閉じています。
または ネットワークからの読み取りでエラーが発生しました。 |
IOException | ソケットへのアクセス中にエラーが発生しました。詳細については、「解説」を参照してください。 |
解説
このメソッドは、データを buffer パラメータに読み込み、正常に読み込まれたバイト数を返します。読み取ることができるデータが存在しない場合、 NetworkStream.Read メソッドは読み取ることができるデータが出現するまでブロックします。ブロックしない場合は、 DataAvailable プロパティを使用して、読み取り用の受信ネットワーク バッファ内のキューにデータが置かれているかどうかを確認します。 DataAvailable が true を返した場合、 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