08/08/29 18:06:00
TcpClient の受信処理で1024Byteずつ受信してメモリストリームに書き出しています。
NetworkStreamのDataAvailableが続きのデータがあるにもかかわらず、
FALSEを返して受信が終了してしまいます。
下記サイトでも同じ問題が記載されています。
URLリンク(www.niseko.or.jp)
現在do~while間にSleep(50)を入れると正常に受信できるのですが、
他にも解決策はありませんか?
//クライアントとの間の通信につかうストリームを取得
NetworkStream ns = server2.GetStream(); //server2は、TcpClient
//クライアントから送られたデータを受信する
System.IO.MemoryStream ms = new System.IO.MemoryStream();
byte[] resBytes = new byte[1024];
int resSize;
do
{
//データの一部を受信する
resSize = ns.Read(resBytes, 0, resBytes.Length);
//受信したデータを蓄積する
ms.Write(resBytes, 0, resSize);
Thread.Sleep(50); //ここで50ミリ秒スリープさせると正常に受信できる
} while (ns.DataAvailable);
string responsStrings = enc.GetString(ms.ToArray());