Come indicato normalmente, è possibile che vengano restituiti meno byte, quindi è stato comunicato. Vedere una funzione di soluzione alternativa al di sotto della quale assicura che legge più byte come è stato detto - in pratica la dimensione del buffer passato. La funzione è da here.
/// Reads data into a complete array, throwing an EndOfStreamException
/// if the stream runs out of data first, or if an IOException
/// naturally occurs.
/// </summary>
/// <param name="stream">The stream to read data from</param>
/// <param name="data">The array to read bytes into. The array
/// will be completely filled from the stream, so an appropriate
/// size must be given.</param>
public static void ReadWholeArray (Stream stream, byte[] data)
{
int offset=0;
int remaining = data.Length;
while (remaining > 0)
{
int read = stream.Read(data, offset, remaining);
if (read <= 0)
throw new EndOfStreamException
(String.Format("End of stream reached with {0} bytes left to read", remaining));
remaining -= read;
offset += read;
}
}
È possibile utilizzare questo metodo prima di leggere dire un intero 2 byte che dovrebbe rappresentare il numero di byte che seguiranno. Quindi leggi ancora una volta, tuttavia ora legge più byte come specificato in questo intero di due byte.
Ma per far funzionare tutto questo, è chiaro che il mittente deve prima inviare un intero di due byte che rappresenta la lunghezza dei dati che seguiranno, quindi i dati stessi.
Quindi in pratica si chiama sopra la funzione su una matrice di byte di dimensione due prima (per ottenere la lunghezza dei dati), e quindi su una matrice di byte con dimensioni come indicato in tale numero intero di 2 byte (per ottenere i dati).
È possibile utilizzare questo per leggere da NetworkStream
. Altri reading su questo argomento.
fonte
2015-12-15 19:19:30
È possibile controllare 'calzino.Available' per vedere quanti dati sono già entrati dalla rete. Nota, potresti ottenere più dati in seguito. – ebyrob
Sì, i 64 byte sono tutti allocati. Sono assegnati prima della chiamata di ricezione, quindi come si può sapere qual è la dimensione effettiva dei dati? Sarebbe come tagliare un pezzo di spago alla lunghezza giusta per avvolgere un pacchetto che non hai mai visto. Avresti bisogno di una sfera di cristallo. – phoog