Questo mi lascia perplesso. Ho un errore sulla ricerca quando non lo chiamo nemmeno?Perché BufferedStream.Write genera "Questo stream non supporta le operazioni di ricerca"?
Ho codice che sembra qualcosa di simile:
// send 42
uint value = 42;
byte[] msg = BitConverter.GetBytes(value);
stream.Write(msg, 0, sizeof(uint));
e ottengo questa eccezione:
System.NotSupportedException was unhandled
Message="This stream does not support seek operations."
Source="System"
StackTrace:
at System.Net.Sockets.NetworkStream.Seek(Int64 offset, SeekOrigin origin)
at System.IO.BufferedStream.FlushRead()
at System.IO.BufferedStream.Write(Byte[] array, Int32 offset, Int32 count)
...
flusso è di tipo System.IO.BufferedStream
. Cosa potrebbe succedere?
di modifica con maggiori informazioni:
sizeof(uint)==msg.length
in questo caso.
Il flusso è dichiarato come stream = new BufferedStream(new NetworkStream(socket), 1024)
edit:
che è stato! Mentre è possibile leggere e scrivere su un singolo NetworkStream
, quando si passa a un BufferedStream
è necessario disporre di uno separato per la lettura e la scrittura. Apparentemente si può chiamare il costruttore NetworkStream
due volte sullo stesso socket per ottenere quello.
Accetterei entrambe le risposte di Justin e Hans se potessi, perché uno mi ha permesso di capire esattamente cosa c'era di sbagliato, e l'altro mi ha portato alla soluzione. Grazie a tutti!
Nel caso in cui questo aiuti, BufferedStream è in cima a un NetworkStream. – redtuna
come hai dichiarato lo stream bufferizzato e quale dimensione? A quale tipo di streaming è associato? e non dovrebbe sizeof (uint) essere msg.length? –