Does NetworkStream.DataAvailable know whether the sender\'s send buffer is empty? Or does it simply indicate whether the receiver\'s read buffer has data? My assumption is t
One side of a connection is not going to know whether the other side's send buffer is empty.
DataAvailable
only indicates whether there is incoming data to be read. You could use that prior to Read()
, but it alone doesn't give you the information you want. It doesn't tell you the beginning and ending of each batch.
I've coded back-and-forth conversation before, and I used length-prefixes in the data. What I did was write helper functions that read an exact number of bytes (chunks at a time) and no more.
The only alternative to length-of-batch values in the stream is some way of examining the incoming data and recognizing the beginnings and endings of batches.