I need to send a lot of text data via TcpClient
. Similar solution found here
Code:
string data = "test";
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
byte[] compressed = Compress(dataBytes);
int dataLength = compressed.Length;
string headers =
"HTTP/1.1 200 OK\r\n"
+ "content-type: text/plain;charset=utf-8\r\n"
+ "connection: keep-alive\r\n"
+ "content-encoding: gzip\r\n"
+ $"content-length: {dataLength}\r\n"
+ "\r\n";
byte[] headerBytes = Encoding.UTF8.GetBytes(headers);
using (NetworkStream ns = client.GetStream())
{
ns.Write(headerBytes, 0, headerBytes.Length);
ns.Write(compressed, 0, dataLength);
}
byte[] Compress(byte[] raw)
{
using (MemoryStream ms = new MemoryStream())
using (GZipStream gzip = new GZipStream(ms, CompressionMode.Compress, true))
{
gzip.Write(raw, 0, raw.Length);
return ms.ToArray();
}
}
The browser does not receive data except for headers. Any help is appreciated.
UPDATE
Here is correct compression method:
byte[] Compress(byte[] raw)
{
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream gzip = new GZipStream(ms, CompressionMode.Compress, true))
{
gzip.Write(raw, 0, raw.Length);
}
return ms.ToArray();
}
}