数据采集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)

原创 2015年07月08日 15:24:15

最近刚做的一个项目,关于 Socket TCP 通信。

需求方提供了一个 ARM 机器,及数据采集器,需要我做一个服务端与数据采集器进行交互。


目的:

数据采集器:定时将读取到的数据发送到服务端。

服务端:将数据采集器发送过来的数据保存在本地。


要求:

1、通信以 TCP 方式进行交互,端口可配置。

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、心跳包:握手建立后,采集器每隔一定时间会往服务端发送一个心跳包,服务端收到心跳包后应立即应答,回复服务器当前时间信息供采集器校时。

7、数据包:采集器在握手建立后,会定时向服务端发送断点数据包和实时数据包,服务端接收到以后将数据保存在本地 PC 并回复 pass。


1、创建服务端Socket

(C#)

IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 36829); //本机预使用的IP和端口

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、创建客户端对象并监听

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

























































                    
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

金蝶KIS商贸高级版4.0汉码盘点机使用说明书-金蝶KIS条码数据采集器,金蝶KIS盘点机PDA

PDA与“金蝶KIS商贸高级版”无缝对接,通过WIFI,3G/4G无线网络连接后台数据库,实时与后台数据库进行数据传输。在PDA上可以通过扫描条码完成采购收货,出库校验,销售出库,仓库盘点,库存查询的...

汉码盘点机无缝对接无缝对【思讯服装之星V9】思讯服装之星盘点机条码数据采集器PDA

【思讯商业之星V9】。通过WIFI,3G,4G网络与总部实时数据交互。在盘点机上扫描条码,即可自动生成后台数据库服务器中的各种单据。采购入库,采购退货,批发销售,批发退货,仓库盘点,实时库存查询(实时...

用java实现简单快速的webservice客户端/数据采集器(支持soap1.1和soap1.2标准,支持utf-8编码)

前言: 用了cxf,axis等各种wbeservice实现库,简单试用了一下动态调用的方式,很不满意,完全无法满足业务的需要,所以自己实现了一个webservice采集客户端,方便动态调用外部webs...
  • eguid_1
  • eguid_1
  • 2017年03月15日 10:46
  • 981

数据采集器-架构介绍

说点事说说数据采集的流程数据采集一般是一个从硬件设备收集到数据,然后对对数据进行解析处理,归类,入库,供查询使用。说说踩过的坑 坑1:java多线程并发数量以及tcp粘包问题 由于数据采集是通过tc...

资产盘点数据采集器 扫描枪(器)PDA应用APP

通过条码或者RFID技术结合PDA手持终端可实现数据采集自动化, 企业部门对固定资产进行条码预分配,并打印粘贴在固定资产上,当需要盘点时,由资产管理中心统一分配盘点任务到PDA手持终端上,盘点员只需拿...

lightinthebox火车头数据采集器(20120812更新) 使用火车头接口技术一键批量采集 批量发布 批量去水印 接口技术

lightintebox 如何 实现 数据采集,lightinthebox中如何实现以下功能:(欢迎广大网友交流 qq:158393237 旺旺:  q459255119) 1  找供应商采...

OpenTSDB数据采集器tcollector介绍及运行说明

摘自optntsdb.net的说明: tcollector tcollector is a client-sideprocess that gathers data from local coll...

如何选购盘点机,条码数据采集器?需要注意哪些事项?比如:金蝶盘点机,药品盘点机,超市盘点机,图书盘点机,服装盘点机等

随着条码技术的普遍推广,仓储管理信息化技术的发展,越来越多的企业均会上一套进销存管理软件来进行仓储管理。但是随着商品的越来越多,库存流转越来越复杂,我们录入各种单据的工作量也越来越大,由于人工录入大量...

googlemap数据采集器

转 :http://www.cnblogs.com/liongis/archive/2010/05/26/1744663.html 前几天在和一个朋友聊天的时候,他说想从这GoogleMap上面...

shopex采集发布接口 shopex火车头数据采集器(20120812更新) 使用火车头接口技术一键批量采集 批量发布 批量去水印 接口技术

shopex如何实现 商品批量导入 数据采集 批量发布:(欢迎广大网友交流 qq:158393237  旺旺:  q459255119) 1  找供应商采购谈判 给你进货价 2  一键...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据采集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)
举报原因:
原因补充:

(最多只允许输入30个字)