NetworkStream.BeginRead

C#、Vb2005 でSocket通信 (複数クライアント&非同期処理) の中で
データーを受け取ったという通知OnReadComplete()関数が呼び出され、
バッファからデーターを読み込んだ後、
//次の受信を待つ
networkStream.BeginRead(buffer, 0, buffer.Length,callbackRead, null);
と言う関数を呼び出している理由について書きます。

NetworkStream.BeginRead メソッドに関しては ここ に書かれています。

C#
public override IAsyncResult BeginRead (
byte[] buffer,
int offset,
int size,
AsyncCallback callback,
Object state
)

VB.NET
Public Overrides Function BeginRead ( _
buffer As Byte(), _
offset As Integer, _
size As Integer, _
callback As AsyncCallback, _
state As Object _
) As IAsyncResult


上の関数でbyte[] buffer又はbuffer As Byte()はデーターを格納する
バッファそのものを指しています。
問題はその次のint offset又はoffset As Integerですが、バッファの中のデーター
を書き込み始める位置を指定します、これはリングバッファの解説を
ご覧になると分かり易いと思います。

何らかの理由により、全部のデーターを読み込まない場合や、
読み込んでしまったデーターをの残しておきたい場合は0以外の
数字を入れます。

ただしそのような場合は次に読む位置と読む長さを自分で管理する
必要が有り、面倒です。
一般的にはバッファの中のデーターを一旦別のバッファに移して、
管理する方が簡単です。(メモリーは食いますが)

一旦バッファの中のデーターを全て読んでしまうと、新しい読み込みは
offset = 0の位置、つまりバッファの先頭番地となり、読み込める長さは、
buffer.Lengthとバッファの大きさになっていることがお分かり頂けると
思います。
私のサンプルプログラムではバッファのデーターは全て読んでしまいますので
第2引数は0を第3引数はbuffer.Lengthになっています。
networkStream.BeginRead(buffer, 0, buffer.Length,callbackRead, null);
networkStream.BeginRead(buffer, 0, buffer.Length, callbackRead, Nothing)

これによりなぜOnReadComplete関数の最後に上のメソドが呼び出されるか
お分かり頂けたと思います。

第4引数のcallbackReadでこのバッファにoffsetの位置から指定した長さを
読み込んだ時に、通知する関数のアドレスが渡されます。
実際はスレッド毎のOnReadComplete関数のアドレスです。

すなわちnetworkStream.BeginReadで指定した長さのデーターが読み込まれると、
OnReadComplete関数が呼び出されます。



同じカテゴリー(PC)の記事画像
Window10アップグレード
PC購入
Windows Update という名の恐怖(2)
Windows Update という名の恐怖(1)
カルチャーショック
USBの不思議
同じカテゴリー(PC)の記事
 Window10アップグレード (2015-09-11 10:50)
 PC購入 (2015-02-23 11:00)
 忙しい (2013-10-01 20:46)
 Windows Update という名の恐怖(2) (2013-07-02 16:19)
 Windows Update という名の恐怖(1) (2013-07-01 11:50)
 カルチャーショック (2012-12-24 08:30)

2011年02月15日 Posted byigoten at 11:54 │Comments(1)PC

この記事へのコメント
… Unbelievable , but I just found software which can do all hard work promoting your kotanero.naganoblog.jp website on complete autopilot - building backlinks and getting your website on top of Google and other search engines 1st pages, so your site finally can get laser targeted qualified traffic, and so you can get lot more visitors for your website.

YEP, that’s right, there’s this little known website which shows you how to get to the top 10 of Google and other search engines guaranteed.

I used it and in just 7 days… got floods of traffic to my site...

…Well check out the incredible results for yourself -
http://magic-traffic-software.com

I’m not trying to be rude here, but I believe when you find something that finally works you should share it…

…so that’s what I’m doing today, sharing it with you:

http://magic-traffic-software.com

Take care - your friend Jennifer
Posted by itergysulturl at 2013年01月28日 11:20
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。