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);
// 创建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 客户端代码实现 完整代码参考代码仓库