Openssl数据安全传输平台004:Socket C

编程入门 行业动态 更新时间:2024-10-26 06:36:07

Openssl<a href=https://www.elefans.com/category/jswz/34/1771445.html style=数据安全传输平台004:Socket C"/>

Openssl数据安全传输平台004:Socket C

文章目录

  • 0. 代码仓库
  • 1. 客户端C API
  • 2. 客户端C API的封装分析
    • 2.1 sckClient_init()和sckClient_destroy()
    • 2.2 sckClient_connect
    • 2.3 sckClient_closeconn()
    • 2.4 sckClient_send()
    • 2.5 sckClient_rev()
    • 2.6 sck_FreeMem
  • 3. 客户端C++ API
  • 4. 服务端C API
  • 5. 服务端C++
  • 6. 客户端和服务端代码框架
  • 7.代码实现
    • 7.1 服务端代码实现
    • 7.2 客户端代码实现
  • 完整代码参考代码仓库

0. 代码仓库

1. 客户端C API

// 客户端
// C API
int 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

  1. 由于几乎所有的API都有参数int *connfd,所以直接将其设置一个私有的成员变量,并且从所有的API参数列表中移除。
  2. 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); //1
int sckServer_close(int connfd);
/* 服务器端环境释放 */
int sckServer_destroy();

5. 服务端C++

// 这个类不能用, 因为只能和一个客户端建立连接
class TcpServer
{
public:// 初始化监听的套接字: 创建, 绑定, 监听TcpServer();~TcpServer();    // 在这里边关闭监听的fdint 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 客户端代码实现

完整代码参考代码仓库

更多推荐

Openssl数据安全传输平台004:Socket C

本文发布于:2023-12-04 22:52:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1662362.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据   平台   Openssl   Socket

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!