...基本的にはタイトルの内容とまったく同じです。NetworkStream.Lengthは実装されていません。代替手段は何ですか?
NetworkStream.BeginRead(...)への呼び出しを含む一連の再帰的な非同期コールバックを作成しようとしています。基本ケースに到達してすべてのバイトを受信したときを知るには、ストリーム内のバイトの長さを知る必要があります。これに対する回避策はありますか?
コード(このコードへのエントリポイントは、TcpListern.BeginAcceptTcpClient呼び出しの後に書き込まれます。:
private void StartRead(IAsyncResult ar)
{
try
{
//Do an initial read:
AsyncClient client = (AsyncClient)ar.AsyncState;
int amountRead = 0;
try
{
amountRead = client.ClientStream.EndRead(ar);
}
catch (IOException io)
{
ProcessDebugLog("Async read complete", io);
client.ClientStream.Close();
return;
}
string text = Encoding.UTF8.GetString(client.Bytes, 0, amountRead);
//If TCP segmentation has occurred, more blocks will have
// to get read in:
if (client.ClientStream.Position < client.ClientStream.Length /*EXCEPTION HERE*/)
{
try
{
client.ClientStream.BeginRead(client.Bytes, 0, client.Bytes.Length, StartRead, client);
}
catch (IOException io)
{
ProcessDebugLog("Async read complete", io);
client.ClientStream.Close();
}
}
else
{
client.ClientStream.Close();
}
}
catch (Exception ex)
{
ProcessDebugLog("ERROR - StartRead", ex);
}
}