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にコールバクがかかって
実行がこの行から下に落ちることになる。
つまり受信イベントが発生すると同じ処理になる。
2010年08月03日 Posted by igoten at 12:39 │Comments(0) │PC
セピアのかなた

この写真は古い。
明治20年から30年代に撮影したものであると思われる。
「MATSUMOTO SHINSHIU JAPAN」となっている。
SHINSHIU シンシウ と書いてあるところが面白い。
Sugiura(杉浦?)写真館で撮影されたものだが、既に松本市
に杉浦写真館なるものは見つけられなかった。
明治の人ってのは何でこんなに存在感があるのだろう。
これに比べると現在の人は薄っぺらい紙のように見えるのは私一人だろうか。
この写真の人物は私の祖、祖、祖母に当たる。