I have a web app which connects to a server using a TCP connection and reads a binary document which it then writes to its response object. In other words it’s transferring a file from a backend server using a custom protocol and returning that file to its client through HTTP.
The server sends a status code and a mime type, which I read successfully and then writes the contents of the file and closes the socket. This seems to work fine.
The client (a C# web app), reads the data:
private NetworkStream stream_; public void WriteDocument(HttpResponse response) { while (stream_.DataAvailable) { const int bufsize = 4 * 1024; byte[] buffer = new byte[bufsize]; int nbytes = stream_.Read(buffer, 0, bufsize); if (nbytes > 0) { if (nbytes < bufsize) Array.Resize<byte>(ref buffer, nbytes); response.BinaryWrite(buffer); } } response.End(); }
This seems to always exit the read loop before all the data has arrived. What am I doing wrong?
I would use the
OutputStreamdirectly with a general-purpose function. With theStream, you can controlFlush.