C# VB.NET TCP/IP ソケット・リーダー
この記事は一般の人には全く意味不明と思いますのでスルーでお願いします。
C#又はVB.NETでTCP/IPの通信プログラムを作成するとき、
System.Net.Sockets.NetWorkStreamクラスを使用して、サーバーや
クライアントの受信コードを作成するとき、受信の部分はどのように
書くのだろうか。
基本的には
NetworkStream stream = server.GetStream();
int intCount = stream.Read(bytes, 0, bytes.Length);
などとしてこの部分をwhile(True)やfor(;;)などの無限ループの
ポーリングで行うことになる。
このように書くのだが、このループCPUに相当負担をかけるのではと
心配になるのだが、実はプログラムは
int intCount = stream.Read(bytes, 0, bytes.Length);
で待機しているのである。
つまり無限ループで処理しているのは一回の受信でバッファに入りきれなかった
データーを処理する為で、データーの有り無はstream.Readにコールバクがかかって
実行がこの行から下に落ちることになる。
つまり受信イベントが発生すると同じ処理になる。
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にコールバクがかかって
実行がこの行から下に落ちることになる。
つまり受信イベントが発生すると同じ処理になる。