... im Grunde genau das, was der Titel sagt. NetworkStream.Length ist nicht implementiert. Was ist eine Alternative?Behelfslösung für .NET NetworkStream.Length Mangel an suppport
Ich versuche, eine rekursive Reihe von Asynchron-Rückrufe zu machen, die Anrufe zu NetworkStream.BeginRead (...) umhüllen. Um zu wissen, wann ich meinen Base Case getroffen und alle Bytes erhalten habe, muss ich die Länge der Bytes im Stream wissen. Gibt es einen Workaround dafür?
-Code (der Einstiegspunkt zu diesem Code nach TcpListern.BeginAcceptTcpClient Aufruf schreiben ist .:
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);
}
}
kontrollieren Sie beiden Seiten der Verbindung? –
Einige Streams sind wirklich Streams. Du weißt nicht, wie viel Wasser in diesem Fluss ist, bis das Wasser ausgeht. –
@Boo Ja, ich kontrolliere beide Seiten. – kmarks2