1.客户端.h文件

 #pragma once
#include<stdlib.h>
//A程序员定义接口形式和调用模式 //初始化句柄
typedef int(*Init_Socket)(void **handle); //发送数据,传入句柄中
typedef int(*Send_Socket)(void *handle, unsigned char *sendbuf, int sendLen); //从句柄中输出数据给内存
typedef int(*Recv_Socket)(void *handle, unsigned char *recvBuf, int *recvLen); //销毁句柄
typedef int(*Destroy_Socket)(void **handle); //将函数指针组成一个结构体,用于联系控制厂商的软件要求
typedef struct _CSocketProtocol
{ Init_Socket Init;
Send_Socket Send;
Recv_Socket Recv;
Destroy_Socket Destroy; }CSocketProtocol; //中间控制层:将实现的函数与句柄中的变量关联在一起
int Init_CSocketProtocol(CSocketProtocol *csp,
Init_Socket Init,
Send_Socket Send,
Recv_Socket Recv,
Destroy_Socket Destroy
);

2.厂商的产品实现(包含两段代码1. 产品.h文件 2.产品代码实现)

 #pragma once
#include<stdlib.h>
//厂商实现各接口函数。 typedef struct _HD
{
unsigned char *data;
int dataLen;
}HD; int Init_Socket1(void **handle);
int Send_Socket1(void *handle, unsigned char *sendbuf, int sendLen);
int Recv_Socket1(void *handle, unsigned char *recvBuf, int *recvLen);
int Destroy_Socket1(void **handle);
 #define _CRT_SECURE_NO_WARNINGS
#include"CScklmp1.h"
#include<string.h> //实现初始化句柄。
int Init_Socket1(void **handle)
{
HD *hd = malloc(sizeof(HD));
if (NULL == handle)
return -;
if (NULL == hd)
return -;
hd->data = NULL;
hd->dataLen = ;
*handle = hd; return ;
} //发送数据到句柄
int Send_Socket1 (void *handle, unsigned char *sendbuf, int sendLen)
{
HD *hd = (HD *)handle;
if (NULL == handle)
return -;
if (NULL == sendbuf)
return -; hd->data = malloc(sendLen+);
if (hd->data == NULL)
return -;
strcpy(hd->data, sendbuf);
hd->dataLen = sendLen; return ;
} //有句柄中提取数据
int Recv_Socket1(void *handle, unsigned char *recvBuf, int *recvLen)
{
HD *hd = (HD *)handle;
if (NULL == handle)
return -;
if (NULL == recvBuf)
return -;
if (NULL == recvLen)
return -; strcpy(recvBuf, hd->data);
*recvLen = hd->dataLen; return ;
} //销毁句柄
int Destroy_Socket1(void **handle)
{
HD *hd = (HD *)(*handle); if (NULL == handle)
return -; if (hd->data != NULL)
{
free(hd->data);
hd->data = NULL;
}
free(hd);
hd = NULL; return ;
}

3.客户端加解密(.h文件和代码实现)

 #pragma once
#include<stdlib.h>
//加密数据
typedef int(*DesEnc)(unsigned char *inDataBuf, int inDataLen, unsigned char *outDataBuf, int *outDataLen);
//解密数据
typedef int(*DesDec)(unsigned char *inDataBuf, int inDataLen, unsigned char *outDataBuf, int *outDataLen); typedef struct _Des
{
//加密数据
DesEnc EC; //解密数据
DesDec DC; }Des; int Init_DecEnc(Des *de, DesDec DC, DesEnc EC);
 #include "EncDec.h"

 int Init_DecEnc(Des *de,  DesEnc EC, DesDec DC)
{
if (de == NULL)
return -;
if (DC == NULL)
return -;
if (EC == NULL)
return -; de->DC = DC;
de->EC = EC; return ;
}

4.厂商的加解密文件(包含两段代码:1.头文件2.代码实现)

 #pragma once
//加密数据
int DesEncHw(unsigned char *inDataBuf, int inDataLen, unsigned char *outDataBuf, int *outDataLen);
//解密数据
int DesDecHw(unsigned char *inDataBuf, int inDataLen, unsigned char *outDataBuf, int *outDataLen);
 #include "CHwImp.h"
#include"des.h"
//加密数据
int DesEncHw(unsigned char *inDataBuf, int inDataLen, unsigned char *outDataBuf, int *outDataLen)
{
DesEnc(inDataBuf, inDataLen, outDataBuf, outDataLen);
return ;
} //解密数据
int DesDecHw(unsigned char *inDataBuf, int inDataLen, unsigned char *outDataBuf, int *outDataLen)
{
DesDec(inDataBuf, inDataLen, outDataBuf, outDataLen);
return ;
}

5.中间层代码实现

 #include "CSocketProtocol.h"

 //A程序员的调用中间层

 int Init_CSocketProtocol(CSocketProtocol *csp,
Init_Socket Init,
Send_Socket Send,
Recv_Socket Recv,
Destroy_Socket Destroy
)
{
if (NULL == csp)
return -;
if (NULL == Init)
return -;
if (NULL == Send)
return -;
if (NULL == Recv)
return -;
if (NULL == Destroy)
return -; csp->Init = Init;
csp->Send = Send;
csp->Recv = Recv;
csp->Destroy = Destroy; return ;
}

6.测试端界面

 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h> #include"CSocketProtocol.h"
#include "CHwImp.h"
#include "CScklmp1.h"
#include "EncDec.h"

这段条件编译的代码没有引入加密内容。
#if 0
int FrameWork(CSocketProtocol *csp, unsigned char *sendBuf, int sendLen, unsigned char *recvBuf, int *recvLen)
{
if (NULL == csp)
return -;
if (NULL == sendBuf)
return -;
if (NULL == recvBuf)
return -;
if (NULL == recvLen)
return -; void *handle = NULL;
csp->Init(&handle); csp->Send(handle, sendBuf, sendLen); csp->Recv(handle, recvBuf, recvLen); csp->Destroy(&handle); return ;
} void TestFrameWork01()
{ //创建结构体指针,
CSocketProtocol csp; //给句柄初始化,使接口与实现函数建立关联
Init_CSocketProtocol(&csp, Init_Socket1, Send_Socket1, Recv_Socket1, Destroy_Socket1);
//要发送的数据和长度
unsigned char *sendBuf = "Good Night!!!";
int sendLen = strlen(sendBuf) + ; //要接收数据的内存和长度
unsigned char recvBuf[] = { };
int recvLen = ; FrameWork(&csp, sendBuf, sendLen, recvBuf, &recvLen); printf("接收的数据是:%s\n", recvBuf);
printf("接收的数据长度是:%d\n", recvLen); }
#endif int FrameWorkPro(CSocketProtocol *csp, Des *de, unsigned char *sendBuf, int sendLen, unsigned char *recvBuf, int *recvLen)
{
if (NULL == csp)
return -;
if (NULL == sendBuf)
return -;
if (NULL == recvBuf)
return -;
if (NULL == recvLen)
return -;
if (NULL == de)
return -; void *handle = NULL;
//初始化句柄
csp->Init(&handle); //创建加密内存(接收加密后的文件),加密长度(保存加密文件的长度)
unsigned char DesEncHwBuf[] = { };
int DesEncHwLen = ;
//将发送内容先传入加密工具,进行处理
de->EC(sendBuf, sendLen, DesEncHwBuf, &DesEncHwLen);
csp->Send(handle, DesEncHwBuf, DesEncHwLen); //创建解密内存(先将句柄中的内容解密,放入这个内存),解密长度(保存解密的文件长度)
unsigned char DesDecHwBuf[] = { };
int DesDecHwLen = ; csp->Recv(handle, DesDecHwBuf, &DesDecHwLen); de->DC(DesDecHwBuf, DesDecHwLen, recvBuf, recvLen); csp->Destroy(&handle); return ;
} void TestFrameWork02()
{ //创建结构体,
CSocketProtocol csp;
Des de;
//给句柄初始化,使接口与实现函数建立关联
Init_CSocketProtocol(&csp, Init_Socket1, Send_Socket1, Recv_Socket1, Destroy_Socket1);
Init_DecEnc(&de, DesEncHw, DesDecHw); //要发送的数据和长度
unsigned char *sendBuf = "Good Night!!!";
int sendLen = strlen(sendBuf) + ; //要接收数据的内存和长度
unsigned char recvBuf[] = { };
int recvLen = ; FrameWorkPro(&csp, &de, sendBuf, sendLen, recvBuf, &recvLen); printf("接收的数据是:%s\n", recvBuf);
printf("接收的数据长度是:%d\n", recvLen); } int main(void)
{ TestFrameWork02(); printf("\n");
system("pause");
return ;
}

企业信息系统集成框架(设计思路)C模式的更多相关文章

  1. 企业信息系统集成框架(设计思路)C++模式

    设计要求: 1.企业信息系统框架.第三方产品通过接口层进行分层. 2.企业信息系统框架如何自由的继承第三方产品:通过一个抽象类.(软件设计要求:模块要求松,接口要求紧). 设计步骤: 1.报文的接受与 ...

  2. App 自动化框架设计思路

    最近在整理和学习Appium+Java 自动化框架,对APP自动化框架的部分设想参考了一些文章,先进行整理下: 框架的思路一: 思考引入:https://www.cnblogs.com/yunfeio ...

  3. Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路

    前言 上一篇文章讲到了JDBC的基本用法及其问题所在,并提出了使用Mybatis的好处,那么今天这篇文章就来说一下该如何设计一个类似Mybatis这样的持久层框架(暂时只讲思路,具体的代码编写工作从下 ...

  4. Javascript框架设计思路图

    这个系列的随笔都是关于Javascript框架设计一书的读书笔记(作者是司徒正美),不是本人原创!!! 一.简介: 1.市面上主流的JS框架,大多数是由一个个模块组合而成,模块化是大多数让软件所遵循的 ...

  5. 开源项目CIIP(企业信息管理系统框架).2018.0904版更新介绍

    源码: https://github.com/tylike/CIIP https://gitee.com/ciip/CIIP 一,CIIP的目标是什么? 更加简单,快速的建立信息类管理系统.让实施人员 ...

  6. RPC框架设计思路

    RPC是指远程过程调用 1.要解决通讯的问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输.连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远 ...

  7. 开源项目CIIP(企业信息管理系统框架).2018.1.0910版更新介绍-上周工作总结

    又狂撸了一周的代码.简化了0904版本的多数操作. 上一次更新时,总共需要10步,这次简化成3步.嗯嗯,自我感觉不错. 重要的:在创建项目时,可以选择常用模块啦! 第一步:启动CIIP.Designe ...

  8. Socket开发框架之框架设计及分析

    虽然在APP应用.Web应用.Winform应用等大趋势下,越来越多的企业趋向于这些应用系统开发,但是Socket的应用在某些场合是很必要的,如一些停车场终端设备的接入,农业或者水利.压力监测方面的设 ...

  9. Sizzle源码分析:一 设计思路

    一.前言 DOM选择器(Sizzle)是jQuery框架中非常重要的一部分,在H5还没有流行起来的时候,jQuery为我们提供了一个简洁,方便,高效的DOM操作模式,成为那个时代的经典.虽然现在Vue ...

随机推荐

  1. ajax 同步和异步的区别

    举个例子:普通B/S模式(同步)AJAX技术(异步)同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事异步: 请求通过事件触发->服务器处理(这时浏览 ...

  2. 兼容IE8

    由于IE8不支持HTML5,而它又是Win7的默认浏览器,我们即使讨厌它,在这几年却也拿它没办法. 最近做了个需要兼容IE8的项目,不可避免地用了HTML5+CSS3,甚至canvas和svg,做兼容 ...

  3. 方差分析anova

    方差分析 参考:http://wiki.mbalib.com/wiki/%E6%96%B9%E5%B7%AE%E5%88%86%E6%9E%90  方差分析(Analysis of Variance, ...

  4. 基于Nginx的开墙方案

    Kubernetes集群内部通过服务名能进行相互调用,但如果Kubernetes中的pod需要调用外部服务,而且这些外部服务是属于不同的安全区域,就面临开墙的问题,因为Kubernetes Pod能够 ...

  5. 万里长征第二步——django个人博客(第一步 ——创建主页)

    运行命令行工具,输入:pip install virtualenv  --安装virtualenv库. virtualenv blog_project_venv ——使用virtualenv创建一个虚 ...

  6. WCF和Socket

    WCF的全称是:Windows Communication Foundation.它是建立在Web Service架构上的一个全新的通信平台.它使用相同的基础结构和 API 来创建应用程序,这些应用程 ...

  7. jQuery匹配各种条件的选择器用法

    :hidden匹配所有的不可见元素,input 元素的 type 属性为 "hidden" 的话也会被匹配到Matches all elements that are hidden ...

  8. shader cycles静态分析

    mali Mali Offline Compiler https://developer.arm.com/products/software-development-tools/graphics-de ...

  9. 从项目上一个子查询扩展学习开来:mysql的查询、子查询及连接查询

    上面这样的数据,想要的结果是:如果matchResult为2的话,代表是黑名单.同一个softId,version,pcInfoId的代表是同一个软件,需要去重:同时,如果相同软件里面只要有一个mat ...

  10. SQL 备份还原单个表

    如果只想备份或恢复单个表而不想备份或恢复整个数据库的话,往往有以下方法: 1.在Sql server2000 中可以使用DTS来将该表的数据导出成另外的文件格式.当需要恢复时,可以将该文件中数据再通过 ...