关于讨论会说到的句柄和套接字
1、首先,什么是句柄。下面是维基百科上的描述:
在程序设计中,句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。(参见封装)。
在上世纪80年代的操作系统(如Mac OS和Windows)的内存管理中,句柄被广泛应用。Unix系统的文件描述符基本上也属于句柄。和其它桌面环境一样,Windows API大量使用句柄来标识系统中的对象,并建立操作系统与用户空间之间的通信渠道。例如,桌面上的一个窗体由一个HWND类型的句柄来标识。如今,内存容量的增大和虚拟内存算法使得更简单的指针愈加受到青睐,而指向另一指针的那类句柄受到冷淡。尽管如此,许多操作系统仍然把指向私有对象的指针以及进程传递给客户端的内部数组下标称为句柄。
2、然后,在百度百科上,socket和套接字两个词条同时存在的,并没有合并。下面是一些摘录:
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。非常非常简单的举例说明下:Socket=Ip address+ TCP/UDP port. that's all~
区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。
3、总结
不严格来说,套接字也算是句柄的一种,它是一个通信链的句柄。所以从功能性上来考虑,它们俩是有一点的相似性的。但是应用的地方不一样。顺便提一下,C++中有句柄类的概念,作用主要是用来隐藏接口的实现部分,和减少项目的重新编译。
2012-08-25
by JACK