数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)
近期刚做的一个项目。关于 Socket TCP 通信。
需求方提供了一个 ARM 机器,及数据採集器,须要我做一个服务端与数据採集器进行交互。
目的:
数据採集器:定时将读取到的数据发送到服务端。
服务端:将数据採集器发送过来的数据保存在本地。
要求:
1、通信以 TCP 方式进行交互,port可配置。
2、自己实现握手、心跳包机制。
3、TCP 包结构包含:包头、有效数据总长度、有效数据、CRC 校验、包尾,当中有效数据包含指令序号和指令内容,为经过 AES 128位加密的 XML 数据。
4、加密算法:AES 128位。加密模式:CBC。填充模式:NoPadding。
5、握手过程:(下面过程均以 TCP 包结构加密形式传输,并仅仅提主要内容数据。省略 CRC 校验说明)
(1)数据採集器发送请求包到服务端,服务端解析包结构后取出数据段进行 AES 解密。
(2)服务端推断该包为请求包后回复一个包括一个随机序列的包到数据採集器。
(3)数据採集器接收到包后将随机序列与 MD5 密钥组合后进行 MD5 加密。并回发给服务端。
(4)服务端接收到加密后的内容,并与本地加密后的内容进行比較,通过则回复 pass,否则回复 fail。
(5)数据採集器收到 pass 则握手成功并建立连接,否则握手失败并断开连接。
6、心跳包:握手建立后。採集器每隔一定时间会往服务端发送一个心跳包。服务端收到心跳包后应马上应答。回复server当前时间信息供採集器校时。
7、数据包:採集器在握手建立后。会定时向服务端发送断点数据包和实时数据包,服务端接收到以后将数据保存在本地 PC 并回复 pass。
1、创建服务端Socket
(C#)
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 36829); //本机预使用的IP和port Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); newsock.Bind(ipep); //绑定 newsock.Listen(10); //监听
(Node.js)
var server = net.createServer(function(socket) { //'connection' listener console.log('client connected'); }); server.listen(36829, function() { //'listening' listener console.log('server bound'); });
2、创建client对象并监听
(C#)
Console.WriteLine("waiting for a client"); Socket client = newsock.Accept(); //当有可用的客户端连接尝试时运行,并返回一个新的socket,用于与客户端之间的通信 IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint; Console.WriteLine("connect with client: " + clientip.Address + " at port: " + clientip.Port); while (true) { byte[] buffer = new byte[1024]; //用于缓存客户端所发送的信息,通过socket传递的信息必须为字节数组 int packageLength = client.Receive(buffer); //用于表示客户端发送的信息长度 if (packageLength == 0) { Console.WriteLine("解除循环监听,Disconnected from " + clientip.Address); break; //当信息长度为0。说明客户端连接断开 } }
(Node.js)
var server = net.createServer(function(socket) { //'connection' listener console.log('client connected'); socket.on('end', function() { console.log('client disconnected'); }); socket.on('data', function(data){ console.log(data.length); console.log(data); }); }); server.listen(36829, function() { //'listening' listener console.log('server bound'); });
由于其它内容涉及到保密性,所以以下仅仅贴一下 AES 加解密过程
// AES 解密 public static string AESDecrypt(byte[] data) { SymmetricAlgorithm aes = Rijndael.Create(); aes.Key = keyArray; // 密钥 aes.IV = keyArray; // 向量 aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.None; byte[] decryptBytes = new byte[data.Length]; using (MemoryStream ms = new MemoryStream(data)) { using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read)) { cs.Read(decryptBytes, 0, decryptBytes.Length); cs.Close(); ms.Close(); } } aes.Clear(); return System.Text.Encoding.Default.GetString(decryptBytes).Replace("\0", " "); }
// AES 加密 public static byte[] AESEncrypt(byte[] data) { SymmetricAlgorithm aes = Rijndael.Create(); aes.Key = keyArray; aes.IV = keyArray; aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.None; using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(data, 0, data.Length); cs.FlushFinalBlock(); byte[] cipherBytes = ms.ToArray(); // 得到加密后的字节数组 cs.Close(); ms.Close(); aes.Clear(); return cipherBytes; } } }
相关文章
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
- 微服务之后,如何处理数据的统一分析(类似报表)
- 曼哈顿Uber数据为证,拼车服务并不会加重交通拥堵
- 阿里聚安全与蚂蚁金服战略合作,为千万商户提供安全服务
- 入门:如何在 Kali Linux 上安装 SSH 服务
- 从Web Service和Remoting Service引出WCF服务
- 【HMS Core】定位服务无法获取街道信息问题
- H3C路由器SSH服务配置命令
- 无法读取服务器服务中的服务器队列性能数据。数据段的第一个四字节 (DWORD) 中包
- 苹果地图为三个欧洲国家提供交通数据 服务范围扩大
- 众多云存储 专家教你选择正确的云存储服务
- Facebook Messenger很快也能像微信那样 通过“公众号”获取服务
- 打造基金业大数据监管体系 私募基金服务业务增至七类
- Redis缓存服务搭建及实现数据读写
- 【HMS Core】统一扫码服务中的RemoteView如何修改视图比例?
- Windows Server 2016搭建DHCP服务
- Megaupload存储服务计划2017回归 原用户数据将恢复
- 网宿CDN中标工商银行 服务金融客户布局政企市场
- GitLab容器注册服务已集成于Docker容器
- 欧盟正式指控谷歌AdWords广告服务反垄断
- 完整安装IIS服务
- Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转
- 灵活运用大数据 努力服务国税工作
- 【.net 深呼吸】聊聊WCF服务返回XML或JSON格式数据
- IBM第二季度营收超预期 向云服务转型战略初见成效
- 英国维权机构Which?批评Windows 10及糟糕消费者服务