C# VB.NET TCP/IP ソケット・リーダー

igoten

2010年08月03日 12:39

この記事は一般の人には全く意味不明と思いますのでスルーでお願いします。

C#又はVB.NETでTCP/IPの通信プログラムを作成するとき、

System.Net.Sockets.NetWorkStreamクラスを使用して、サーバーや
クライアントの受信コードを作成するとき、受信の部分はどのように
書くのだろうか。
基本的には
NetworkStream stream = server.GetStream();
int intCount = stream.Read(bytes, 0, bytes.Length);
などとしてこの部分をwhile(True)やfor(;;)などの無限ループの
ポーリングで行うことになる。

while (true) { try { int intCount = stream.Read(bytes, 0, bytes.Length); if (intCount != 0) {    .... }

このように書くのだが、このループCPUに相当負担をかけるのではと
心配になるのだが、実はプログラムは
int intCount = stream.Read(bytes, 0, bytes.Length);
で待機しているのである。
つまり無限ループで処理しているのは一回の受信でバッファに入りきれなかった
データーを処理する為で、データーの有り無はstream.Readにコールバクがかかって
実行がこの行から下に落ちることになる。
つまり受信イベントが発生すると同じ処理になる。


関連記事