一些术语

<!DOCTYPE html>

一些术语

一些术语

MFC编程(Microsoft Foundation Class Library),MFC是C++类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。

windows API:应用程序编程接口,是windows提供的,给应用程序调用的底层函数。


MFC编程win32 API编程的区别:MFC是API的上层,这么说可能不好理解。假如你有一个组装变形金刚,那么API就是零件,MFC就是你组装好的手臂、激光剑、脚。

听说微软都放弃了MFC?。。过时了?

CRT:c runtime,直译运行时库感觉十分古怪。由于各个操作系统提供的接口不同,那么应用程序调用API就不能跨平台运行。所以CRT提供了类似于API的这么一个东西,应用程序调用它。由于在不同平台上的CRT一样,所以跨平台。

Visual Studio是微软的可视化工具集,其中包含Visual C++, Visual Basic, Visual C#等等许多工具。就象Microsoft Office包含Word, Excel, PowerPoint等

静态链接库,在以前,程序是独立的,编个程序要从头到尾自己考虑。

后来为了方便,把通用的程序放在一起,这就是库,遇到需要类似的功能就可以调用。

但是这个有个问题,计算机不知道你要用的是链接库哪一个程序,所以它不得不将链接库全部程序包含进来,使得程序很大。

动态链接库,本身和静态链接没什么区别,也是把通用代码写进一些独立文件里,但是在编译方面,微软绕了个圈子,并没有采取把库文件加进程序的方法,而是把库文件做成已经编译好的程序,给它们开个交换数据的接口,写程序的时候,一旦要使用某个库文件的一个功能函数,系统就把这个库文件调入内存,连接上这个程序占有的任务进程,然后执行程序要用的功能函数,并把结果返回给程序显示出来,在我们看来,就像是程序自己带有的功能一样。完成需要的功能后,这个DLL停止运行,整个调用过程结束。

DLL是编译好的代码,与一般程序没什么大差别,只是它不能独立运行,需要程序调用。DLL的代码和其他程序几乎没什么两样,仅仅是接口和启动模式不同,只要改动一下代码入口,DLL就变成一个独立的程序。DLL木马就是把一个实现了木马功能的代码,加上一些特殊代码写成DLL文件,导出相关的API,在别人看来,这只是一个普通的DLL,但是这个DLL却携带了完整的木马功能,这就是DLL木马的概念。

也许有人会问,既然同样的代码就可以实现木马功能,那么直接做程序就可以,为什么还要多此一举写成DLL呢?这是为了隐藏,因为DLL运行时是直接挂在调用它的程序的进程里的,并不会另外产生进程,所以相对于传统EXE木马来说,它很难被查到。


SOCKET

是什么?

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

为什么?

是为了解决进程之间通信问题发明出来的。类似于鼠标与电脑之间输入输出通信,但比这个要复杂。存在很多网络协议,要如何建立两个计算机之间进程的通信,所以建立一通用的机制

怎么样?

socket是通信端点,连有进程,它住在通信区域(地址簇),socket只能在同一区域中交换数据。

——我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。

如果想要使传输的数据有意义,则必须使用到应用层协议。

应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。

WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”

而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。

通过Socket,我们才能使用TCP/IP协议。

实际上,Socket跟TCP/IP协议没有必然的联系。

Socket编程接口在设计的时候,就希望也能适应其他的网络协议。

所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,

从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。

网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:

“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,

TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。


如何建立socket

一般是这个形式: S=socket(int af ,int type , int protocol);

参数,af,type,protocol,有三个参数,地址族,类型,协议。

支持的地址有,内部地址,tcp/ip地址等等。

类型有,基于TCP的socket_stream提供面向连接,可靠的数据传输服务,基于UDP的数据包socket,等等。

协议,socket可以不指定协议。