欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

openssl实现安全web服务器,openssl对外接口

终极管理员 知识笔记 54阅读

文章目录 0. 代码仓库1. 客户端C API2. 客户端C API的封装分析2.1 sckClient_init()和sckClient_destroy()2.2 sckClient_connect2.3 sckClient_closeconn()2.4 sckClient_send()2.5 sckClient_rev()2.6 sck_FreeMem 3. 客户端C API4. 服务端C API5. 服务端C6. 客户端和服务端代码框架7.代码实现7.1 服务端代码实现7.2 客户端代码实现 完整代码参考代码仓库

0. 代码仓库

1. 客户端C API

// 客户端// C APIint sckClient_init();/* 客户端 连接服务器 */int sckClient_connect(char *ip, int port, int connecttime, int *connfd);/* 客户端 关闭和服务端的连接 */int sckClient_closeconn(int connfd);/* 客户端 发送报文 */int sckClient_send(int connfd, int sendtime, unsigned char *data, int datalen);/* 客户端 接受报文 */int sckClient_rev(int connfd, int revtime, unsigned char **out, int *outlen); //1/* 释放内存 */int sck_FreeMem(void **buf);/* 客户端 释放 */int sckClient_destroy();
2. 客户端C API的封装分析 2.1 sckClient_init()和sckClient_destroy()

int sckClient_init(); 可以使用构造函数代替

TcpSocket();TcpSocket(int fd);~TcpSocket();
2.2 sckClient_connect 由于几乎所有的API都有参数int *connfd所以直接将其设置一个私有的成员变量并且从所有的API参数列表中移除。C使用string来拷贝字符串比char方便

/* 客户端 连接服务器 */
int sckClient_connect (char *ip, int port, int connecttime, int *connfd );

int conectToHost(string ip, unsigned short port, int connecttime)int m_connfd;
2.3 sckClient_closeconn()

/* 客户端 关闭和服务端的连接 */
int sckClient_closeconn(int connfd );

int disConnect();
2.4 sckClient_send()

unsigned char *data, int datalen 是要发送的数据直接修改为string sendMsg

/* 客户端 发送报文 */
int sckClient_send(int connfd, int sendtime, unsigned char *data, int datalen);

int sendMsg(string sendMsg, int sendtime  10000)
2.5 sckClient_rev()

/* 客户端 接受报文 */
int sckClient_rev(int connfd, int revtime, unsigned char **out, int *outlen);

string recvMsg(int timeout)
2.6 sck_FreeMem

/* 释放内存 */
int sck_FreeMem(void **buf);

3. 客户端C API
// 创建TcpSocket对象  一个连接, 这个对象就可以和服务器通信了, 多个连接需要创建多个这样的对象class TcpSocket{public:   TcpSocket();   TcpSocket(int fd);   ~TcpSocket();      /* 客户端 连接服务器 */   int conectToHost(string ip, unsigned short port, int connecttime);   /* 客户端 关闭和服务端的连接 */   int disConnect();   /* 客户端 发送报文 */   int sendMsg(string sendMsg, int sendtime  10000);   /* 客户端 接受报文 */   string recvMsg(int timeout);private:   int m_connfd;}
4. 服务端C API
// 服务器端/* 服务器端初始化 */int sckServer_init(int port, int *listenfd);int sckServer_accept(int listenfd, int timeout, int *connfd);/* 服务器端发送报文 */int sckServer_send(int connfd, int timeout, unsigned char *data, int datalen);/* 服务器端端接受报文 */int sckServer_rev(int  connfd, int timeout, unsigned char **out, int *outlen); //1int sckServer_close(int connfd);/* 服务器端环境释放 */int sckServer_destroy();
5. 服务端C
// 这个类不能用, 因为只能和一个客户端建立连接class TcpServer{public:    // 初始化监听的套接字: 创建, 绑定, 监听    TcpServer();    ~TcpServer();    // 在这里边关闭监听的fd    int acceptConn(int timeout);    /* 服务器 发送报文 */    int sendMsg(string sendMsg, int sendtime  10000);    /* 服务器 接受报文 */    string recvMsg(int timeout);     int disConnect();    // 和客户端断开连接private:    int m_lfd;        // 监听的文件描述符    int m_connfd;    // 通信的文件描述符}
6. 客户端和服务端代码框架 7.代码实现 7.1 服务端代码实现 7.2 客户端代码实现 完整代码参考代码仓库

标签:
声明:无特别说明,转载请标明本文来源!