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();
}
}