企业信息系统集成框架(设计思路)C模式
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模式的更多相关文章
- 企业信息系统集成框架(设计思路)C++模式
设计要求: 1.企业信息系统框架.第三方产品通过接口层进行分层. 2.企业信息系统框架如何自由的继承第三方产品:通过一个抽象类.(软件设计要求:模块要求松,接口要求紧). 设计步骤: 1.报文的接受与 ...
- App 自动化框架设计思路
最近在整理和学习Appium+Java 自动化框架,对APP自动化框架的部分设想参考了一些文章,先进行整理下: 框架的思路一: 思考引入:https://www.cnblogs.com/yunfeio ...
- Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路
前言 上一篇文章讲到了JDBC的基本用法及其问题所在,并提出了使用Mybatis的好处,那么今天这篇文章就来说一下该如何设计一个类似Mybatis这样的持久层框架(暂时只讲思路,具体的代码编写工作从下 ...
- Javascript框架设计思路图
这个系列的随笔都是关于Javascript框架设计一书的读书笔记(作者是司徒正美),不是本人原创!!! 一.简介: 1.市面上主流的JS框架,大多数是由一个个模块组合而成,模块化是大多数让软件所遵循的 ...
- 开源项目CIIP(企业信息管理系统框架).2018.0904版更新介绍
源码: https://github.com/tylike/CIIP https://gitee.com/ciip/CIIP 一,CIIP的目标是什么? 更加简单,快速的建立信息类管理系统.让实施人员 ...
- RPC框架设计思路
RPC是指远程过程调用 1.要解决通讯的问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输.连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远 ...
- 开源项目CIIP(企业信息管理系统框架).2018.1.0910版更新介绍-上周工作总结
又狂撸了一周的代码.简化了0904版本的多数操作. 上一次更新时,总共需要10步,这次简化成3步.嗯嗯,自我感觉不错. 重要的:在创建项目时,可以选择常用模块啦! 第一步:启动CIIP.Designe ...
- Socket开发框架之框架设计及分析
虽然在APP应用.Web应用.Winform应用等大趋势下,越来越多的企业趋向于这些应用系统开发,但是Socket的应用在某些场合是很必要的,如一些停车场终端设备的接入,农业或者水利.压力监测方面的设 ...
- Sizzle源码分析:一 设计思路
一.前言 DOM选择器(Sizzle)是jQuery框架中非常重要的一部分,在H5还没有流行起来的时候,jQuery为我们提供了一个简洁,方便,高效的DOM操作模式,成为那个时代的经典.虽然现在Vue ...
随机推荐
- Java常用小笔记
1.对list集合进行分页 //startIndex指的是开始的小标 从0开始,pageSize是每页记录数 int toIndex = new Integer(startIndex)+new Int ...
- [转]SSH包全解
Struts2 Core Libraries 必须引入的包 : struts2-core.jar——Struts2的核心包 xwork-core.jar——Command模式框架,WebWork和St ...
- dump备份mysql库
Auth: Jin Date: 20140403 Content: #!/bin/bash - ### auth: Jin ### ### Desc: 根据配置文件里的ip,端口(dblist文件格式 ...
- 一个简单的MVC模式练习
控制层Action接受从模型层DAO传来的数据,显现在视图层上. package Action; import java.sql.Connection; import java.sql.SQLExce ...
- 开源轻量级即时通讯技术 MobileIMSDK 的常见问题解答
本帖最后由 茜茜asa 于 2015-12-14 17:50 编辑 申明:MobileIMSDK 目前为个人原创开源工程且已发布,现整理了一些有关MobileIMSDK的常见的问题,希望对需要的人有用 ...
- js中setinterval 的相关使用
1.setinterval 方法 setinterval()是定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式. 2.创建一个setinterval 方法 setInterval(s ...
- Windows Server 2008 远程桌面连接拒绝
(1)远程连接的时候在本地用户名添加域名 现象:在Windows2008R2配置成域控制器前,还没有安装AD,管理员Admistrator以及新创建的用户(创建的时候将该用户加入远程桌面管理组),发现 ...
- iOS:网页视图控件UIWebView的详解
网页视图控件:UIWebView 功能:它是继承于UIView的,是一个内置的浏览器控件,以用来浏览从网络下载下来的网页或者本地上加载下来的文档. 枚举: //网页视图导航类型 typedef NS_ ...
- go语言基础之安装go开发环境和beego
1.install gogo1.11.4.windows-amd64.msi #默认安装就可以 2.golandgoland-2018.2.2.exe 安装完成,不要运行软件. 软件下载:https ...
- unity macro 分平台处理
https://docs.unity3d.com/ScriptReference/SystemInfo.html https://docs.unity3d.com/Manual/PlatformDep ...