几种网络编程方式的比较
cndg2006-4-13
一、常见的四种网络编程方式
1.ISAPI编程
ISAPI(即Internet Server Application Program Interface),是微软提供的一套面向Internet 服务的API接口,它能实现CGI(Common Gateway Interface,公共网关接口)能提供的全部功能,并在此基础上进行了扩展,如提供了过滤器应用程序接口。ISAPI的工作原理和CGI大体上是相同的,都是通过交互式主页取得用户输入信息,然后交服务器后台处理。但是二者在实现机制上大相庭径。ISAPI与CGI最大的区别在于:在ISAPI下建立的应用程序是以动态连接库(Dynamic Link Lib,DLL)的形式存在;而CGI的应用程序一般都是可执行程序。ISAPI应用的工作流程与CGI也有一些不同。ISAPI应用的DLL不仅可以象CGI程序一样被用户请求激活,还可以被系统预先激活来监视用户输入;对于被用户激活的DLL,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的用户输入,直到过了一段时间后一直没有用户输入。一个ISAPI的DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。不过ISAPI的平台兼容性较差,目前只能用于微软自己的Windows 95和NT操作系统上,服务器平台也仅限于IIS(Internet Information Server)和MS personal web server以及NT workstation上的peer web server。ISAPI DLLs的调用方法和CGI一样:在客户端使用GET或POST方法。
MFC中支持ISAPI的类有:
ChttpServer
【日记博文|几种网络编程方式的比较】CHttpServerContext
CHttpFilter
CHttpFilterContext
CHtmlStream
2.CGI编程
CGI的工作原理介绍:CGI(Common Gateway Interface)是一个WEB服务器提供信息服务的标准接口,通过这样一个接口,WEB服务器能够执行程序,并将程序输出的信息返回给浏览器。因为在WEB网上的数据都是静态的,通过CGI程序能够动态的处理浏览者的请求,如保存用户输入的信息,根据用户信息返回相关的资料等等。当客户端发送一个CGI请求给WEB服务器后,WEB服务器将根据CGI程序的类型决定数据向CGI程序的传送方式,一般来讲是通过标准输入/输出流和环境变量来与CGI程序间传递数据。CGI的输入/输出方法:CGI程序通过标准输入(STDIN)和标准输出(STDOUT)来进行输入输出,STDIN和STDOUT是两个预先定义好的文件指针。你可以利用文件读写函数来对其进行操纵。
3.WinInet编程
Win32 Internet 扩展提供了对普通Internet协议的访问,这些协议包括:gopher, FTP,和 HTTP,使用WinInet可以编写出高水平的Internet客户端程序,而不必去了解winsock、TCP/IP和特定Internet协议的细节。WinInet为所有三种协议提供了统一的函数集,既Win32 API接口。如果底层协议改变(如从FTP到HTTP),利用统一的函数集,用最少的代码就可以完成改变。
Visual C++ 有两种方式来使用WinInet。一种是直接调用Win32 Internet函数,另一种是使用WinInet类库。
MFC 提供了下列的类和全程函数来创建Internet客户端程序。
CInternetSession (父类 CObject)
CInternetConnection (父类 CObject)
CFtpConnection
CGopherConnection
CHttpConnection
CInternetFile(父类 CStdioFile)
CGopherFile
CHttpFile
CFileFind(父类 CObject)
CFtpFileFind
CGopherFileFind
CGopherLocator(父类 CObject)
CInternetException(父类 CException)
全程函数:
AfxParseURL
AfxGetInternetHandleType
AfxThrowInternetException
这些类和全程函数除CFileFind在AFX.H里声明之外,其余都在AFXINET.H文件里声明。
4.Winsock编程
Winsock接口为进程间通信提供了一种新的手段,它不但能用于同一机器中的进程之
间通信,而且支持网络通信功能。Winsock已经被正式集成到了Windows系统中,同时包括了16位和32位的编程接口。而Winsock的开发工具也可以在Borland C++6.0、Visual C++6.0这些C++编译器中找到,主要由一个名为winsock.h的头文件和动态连接库winsock.dll或wsodk32.dll组成,这两种动态连接库分别用于Win16和Win32的应用程序。winsock.dll或wsodk32.dll中包含socket与WSASocket系列操作的函数。
二、这几种方式的区别:
1)ISAPI主要是开发基于浏览器客户端与服务器端程序。效率比CGI方式高,而且也扩展了CGI没有的一些功能。(基于TCP/IP模型中的应用层)
2)CGI主要是开发基于浏览器客户端与服务器端程序。(基于TCP/IP模型中的应用层)
3)WinInet主要是开发客户端程序。(基于TCP/IP模型中的应用层)
4)Winsock主要是基于socket来开发客户端与服务器端程序。(基于TCP/IP模型中的各层)要想开发低层协议的程序的话就要了解协议的报文格式。
推荐阅读
- C++|浅析boost::asio::deadline_timer运行机制
- JQuery Easy UI 使用
- nginx 源码(5)事件驱动架构
- nginx 源码(2)运行
- 网络编程|nginx 源码(4)主流程
- nginx 源码(1)编译
- 网络编程|nginx 源码(3)调试
- epoll如何判断客户端不可读
- 关于TCP协议收到数据不完整