通过一段时间的学习,编写了一个安全通信实例,在这里分享一下心得。
openssl的安装和编译我在这里就不多说了,可以到openssl官网下载安装,https://www.openssl.org/。
mfc的学习在前面已经介绍了,在这里也不多介绍了。
可以看到编写一个综合性较强的项目,需要的是大量的知识,比如说socket编程,你需要了解其函数的用法和加载的流程。一个项目的大致方向应该有一定的方向感,我自己画了一个流程图,然后跟着设计一个个的实现功能。
图不怎么好看啊,领会一下吧。
大致实现思路**
开始实现,搭建基本框架,不需要添加其他的东西,只需要将socket的框架搭建起来,然后再慢慢往里面加东西。
这些基本的我就不介绍了,如果基本的socket都不会那后面的也就不用写了。
在这里只需注意的是在mfc中控件的消息映射,因为socket套接字基本上都是char *类型,而控件则基本是cstring类型,所以需要用到一些转换函数:
char *类型转cstring:
普通字符:cstring str.Format(_T("%s"),char *);
宽字符:str.Format(_T("%s"),(CStringW)char *);
根据自己需要来,类型不匹配会出现乱码。
cstring 转 char *:
普通:cstring (char *)Msg.GetBuffer();
后面这个更好用,但要加:USES_CONVERSION;
char *source=T2A(strMsg);
编写线程
当完成了基本框架的设计,就要开始实现一些功能,比如说线程函数。
为什么要实现线程函数呢?在这里就要说一下socket的一些特性了。
普通socket是基于阻塞模式工作的,当然也可以利用mfc封装的CAsyncSocket类,基于非阻塞模式,但不怎么好用,所以就不在这里说了。
当你使用线程与阻塞相结合时,就相当于实现了异步的效果。主线程继续进行工作,子线程 实现阻塞监听,接收等功能。
主线程代码,介绍一下几个重要参数,第三个参数是你的子线程函数名,第四个参数本来可以为空,但这里主线程为类函数,所以调用this指针指向类对象,从而调用。
注意点:
因为调用的是全局变量,所以子线程函数应该声明为静态函数,不然