У меня проблема.Когда я пытаюсь отправить сжатый файл (byte []) на сервер, и когда он распаковывается, файлы не совпадают друг с другом.Я думал, проблема в функциях сжатия, но мой клиент может сжать и распаковать массив байтов на его стороне.Итак, вот код:
Соединение с сервером (на стороне клиента):
private void ConnectToServer() {
try {
_client = new TcpClient(_address, _port);
_stream = new SslStream(_client.GetStream(), true,
new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
try {
_stream.AuthenticateAsClient(_address);
_stream.Write(new byte[]{1});
} catch (AuthenticationException ex) {
_iClient.ExceptionHandler(ex);
_client.Close();
}
} catch (SocketException ex) {
_iClient.ExceptionHandler(ex);
_iClient.SuccessfulConnectionHandler();
Environment.Exit(0);
}
}
}
Прием клиента (на стороне сервера):
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();
}
}
Итак.Почему это случилось?
А вот дополнительная информация: я использую ssl-соединение, у меня проблемы только с большими файлами, я могу сохранять файлы без сжатия.