c# WINFORM 双机RS485通信,数据可以进行GZIP压缩传送吗?
c# WINFORM 双机RS485通信,数据可以进行GZIP压缩传送吗?设备:两台 windows 10 PC
功能:运行相同的程序,分别从设备不同的485端口读取数据并显示
需求:两台PC 之间相互独立,参数配置需要在两台PC上单独设置,现想通过增加RS485来实现参数配置文件同步功能!(现场环境因素现在,只能增加RS485接口)
疑问:使用GZIP 压缩后,传送 是否有在项目中使用过?是否适合这样做?
测试主要代码如下!
/// <summary>
/// 压缩字节数组
/// </summary>
/// <param name="str"></param>
public static byte[] Compress(byte[] inputBytes)
{
using (MemoryStream outStream = new MemoryStream())
{
using (GZipStream zipStream = new GZipStream(outStream, CompressionMode.Compress, true))
{
zipStream.Write(inputBytes, 0, inputBytes.Length);
zipStream.Close(); //很重要,必须关闭,否则无法正确解压
return outStream.ToArray();
}
}
}
/// <summary>
/// 解压缩字节数组
/// </summary>
/// <param name="str"></param>
public static byte[] Decompress(byte[] inputBytes)
{
using (MemoryStream inputStream = new MemoryStream(inputBytes))
{
using (MemoryStream outStream = new MemoryStream())
{
using (GZipStream zipStream = new GZipStream(inputStream, CompressionMode.Decompress))
{
zipStream.CopyTo(outStream);
zipStream.Close();
return outStream.ToArray();
}
}
}
} 保险起见至少加个校验吧,校验不通过就重发。你测试一下校验不通过的比例。而且数据量比大的话,加个帧头吧 有没有考虑过一个字节出错(或丢失)的时候,整个流是否都会出错的问题? gwnpeter 发表于 2020-10-4 10:22
有没有考虑过一个字节出错(或丢失)的时候,整个流是否都会出错的问题? ...
这些是要考虑,个人理解,数据不符合gzip格式,解析就会出错!
数据大概多长?
Himem 发表于 2020-10-5 07:32
数据大概多长?
大概有3k 数据! 本帖最后由 Himem 于 2020-10-5 08:10 编辑
longlong105 发表于 2020-10-5 07:54
大概有3k 数据!
那应该还好
再加个帧头尾就行,gz自带校验
再长就要考虑分包重传或/纠错码了
页:
[1]