C#Gzip错误地压缩了服务器端的字节数组

C#Gzip错误地压缩了服务器端的字节数组,c#,ssl,server,compression,gzip,C#,Ssl,Server,Compression,Gzip,我有个问题。当我试图将压缩文件(字节[])发送到服务器时,当解压缩它时,文件彼此不匹配。我想,问题在于压缩函数,但我的客户端可以压缩和解压缩字节数组。下面是代码: 与服务器的连接(客户端): 接受客户端(服务器端): 还有我的压缩功能: byte[] Compress1(byte[] data) { using (var compressedStream = new MemoryStream()) using (var zipStream = new GZipSt

我有个问题。当我试图将压缩文件(字节[])发送到服务器时,当解压缩它时,文件彼此不匹配。我想,问题在于压缩函数,但我的客户端可以压缩和解压缩字节数组。下面是代码:

与服务器的连接(客户端):

接受客户端(服务器端):

还有我的压缩功能:

byte[] Compress1(byte[] data) {
        using (var compressedStream = new MemoryStream())
        using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress)) {
            zipStream.Write(data, 0, data.Length);
            zipStream.Close();
            return compressedStream.ToArray();
        }
    }

    byte[] Decompress1(byte[] data) {
        using (var compressedStream = new MemoryStream(data))
        using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
        using (var resultStream = new MemoryStream()) {
            zipStream.CopyTo(resultStream);
            return resultStream.ToArray();
        }
    }
所以。为什么会这样


这里还有一些额外的信息:我使用ssl连接,我只有大文件有问题,我可以保存文件而无需压缩。

我不知道为什么,但sslstream中有一些功能。首先,您只能得到1个字节(即使缓冲区的大小要大得多),您应该通过再次调用read函数来读取剩余的字节。但这不是我的问题。通过调用reading函数一次可以获得的最大缓冲区大小为16227

您不会显示调用Compress1、传递有效负载、接收有效负载和调用解压缩1的位置-大多数网络问题都与编码和/或“帧”有关,而您没有显示。我们能在网络代码的上下文中看到调用这些方法的代码吗?如果您能提供一个复制问题的方法,那就太棒了。
private static void SetupServer() {
        try {
            IPAddress ipAddress;
            if (!IPAddress.TryParse(_address, out ipAddress)) ipAddress = Dns.GetHostAddresses(_address)[0];
            _listener = new TcpListener(ipAddress, _port);
            _listener.Start();
            WriteLine("\b\b\b - Успешно;");
            WriteLine("Ожидание подключений...");

            while (true) {
                var client = _listener.AcceptTcpClient();
                var sslStream = new SslStream(client.GetStream(), true);
                try {
                    sslStream.AuthenticateAsServer(new X509Certificate(_certificate, _password),
                        false, SslProtocols.Tls, true);
                    WriteLine("{0} : [{1}] Успешное подключение",
                        DateTime.Now.ToString(CultureInfo.InvariantCulture),
                        (client.Client.RemoteEndPoint as IPEndPoint)?.Address);
                    new Thread(() => ProcessClient(client, sslStream)).Start();
                } catch (AuthenticationException e) {
                    sslStream.Close();
                    client.Close();
                } 
            }
        } catch (Exception ex) {
            WriteLine(ex.Message);
            WriteLine(ex.StackTrace);
        } finally {
            _listener?.Stop();
        }
    }
byte[] Compress1(byte[] data) {
        using (var compressedStream = new MemoryStream())
        using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress)) {
            zipStream.Write(data, 0, data.Length);
            zipStream.Close();
            return compressedStream.ToArray();
        }
    }

    byte[] Decompress1(byte[] data) {
        using (var compressedStream = new MemoryStream(data))
        using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
        using (var resultStream = new MemoryStream()) {
            zipStream.CopyTo(resultStream);
            return resultStream.ToArray();
        }
    }