《VC++60中的网络编程方法.pdf》由会员分享,可在线阅读,更多相关《VC++60中的网络编程方法.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 2 2 卷第 1 期 2 0 0 3年 3月 成都大学学报(自然科学版)J o u r n a l o f C h e n g d u Un i v e r s i t y(Na t u r a l s c i e n c e)Vo 1 2 2 No 1 Ma r 2 o 0 3 文章编号:1 0 0 4 5 4 2 2(2 0 0 3)0 1 0 0 5 6 0 5 VC+6 0中的网络编程方法 蔡 长安(江苏盐城师范学院计算机 系,盐城 2 2 4 0 0 2)摘要:本文介 绍 了 V C+6 0下的网络 编程 的几种方 法,并给 出一些实例 关键词:VC;网络;编程 中图分类号:T
2、P 3 1 2”文献标识码:A The M e t ho d o f Ne t wo r k Pr o g r a m i n VC+6 0 C AL Ch a n g a n (D e p a r t me n t o f C o mp u t e r S c i enc e,Y a n c h e n gT e a c h e r s C o l l e g e,Y a n c h e n g 2 2 4 0 0 2,C h i n a)Ab s t r ac t:Th i s p a p e r i n t r o d u c e s a f e w me t h o d s o f N
3、e t wo r k p r o g r a m,a n d g i v e s G g n e e x a mp l es Ke y wo r d s:VC;n e t wo r k;p r o c e s u r e d esi g n O 引 言 V C是一个功能强大的、灵活性好和完全可扩展的 Wi n d o w s 开发系统 它被用来创建文字处理器、电子 数据表格、多媒体、网络 任何在Win d o ws 下能做的事,都可以用 V C来完成 如果 V C不能直接支持某种特 性,那它一定会在 Wm dows 动态链接库或在定制控件形式中得到支持 V C 6 0 具有强有力的 I n t
4、 e m e t 支持,MF C类库封装了Wm 3 2 I n t e r n e(Win I n t),使得 I n te m e t 编程更为容易,Wm l n e t 使 I n t e m e t 成为应用程序的一 部分,并简化了对 I n t e r n e t 服务器的访问 Wir k x k 规范给应用程序开发者提供了一套简单的A P I,而且制 定了网络规范 MF C 类库使用 C h 郇S 啊、C h t t p F il t e r、O a t tp S e r v e r C o n t e x t、C h t t p F d t e r C o n t e x t 和
5、0蚺 嘞 m 类来封装 I S A P 通过这些类可以创建动态链接库,以便添加功能到 I n t e me t 服务器和 We b页 中向导工具 支持 I n t e me t 应用程序的创建 下面介绍在 VC下网络编程的方法 1 W i n S o c k Wi n S o c k(Wi n d o ws 套接字)是 WO S A的一部分 Wi n S o e k规范对 Wi n d o ws 进行了专门的扩展,定义 了二进制网络编程接 口 套接字是通信用卡端点的抽象,它提供了通过网络发送和接收数据的机制 MF C提供了有几个类来支持套接字编程 其中的C a s y n c S o c k
6、e t 类封装了Wi n S o e k A P I,而从 C a s y n S o e k 一 收稿日期:2 0 0 20 90 8 作者简介:蔡长安(1 9 6 4 一),男,工程师,从事计算机硬件教学 维普资讯 http:/ 第 1期 蔡长安:VC+6 0中的网络编程方法 5 7 e t 派生的 C s o c k e t 类则提供了更高一级的抽象来简化网络通信编程 Win d o w s 编程是异步的,即许多不同的事情同时发生 C a s y n S o e k e t 类采用函数发送请求后立即返 回,当请求完成时发送一条Win d o w s 消息 例如,通过面向连接的S o c
7、k e t 向另一个 I n t e r n e t 站点发送一 个字符串,可以调用 S o c k e t 函数 S e n d()S e n d()函数并不需要发送任何数据,它只是试图发送,并且当 S o c k e t 没有准备好或正在等待时立即返回 S o c k e t 准备好后,将向S o c k e t 窗口发送一条消息,S o c k e t 窗 口得到消息后再将数据发送出去 这就是异步Win d o w s 编程 C a s y S o c k e t 类是一个为异步 Wi n s o c k调用设计的包装类 它有许多有用的函数使得 Win S o c k A P I 函数的
8、使用变得方便 C s o c k e t 从 C a s y c S o c k e t 类继承而来,C a s y c S o c k e t 类的所有成员函数也适用于它,同时还有一些新加的和重载的函数 具体成员函数和功能可参见 1 以下是采用 C s o c k e t 类在服务器 套接字和客户机套接字之间建立通信 的基本过程:(1)创建套接字 首先调用 C s o c k e t 的构造函数来构造一个空对象,然后调用 C r e a t e 创建一个底层套接 字对于客户机套接字,调用 C r e a t e 时使用默认参数即可 对于服务器套接字,还要指定一个端口号 (2)建立连接如果是客
9、户机套接字,那么可以调用 C a s y n c S o c k e t :C o n n e c t 来建立与服务器 的连 接 如果是服务器套接字,那么要调用 C a s y n c S o c k e t :L i s t e n 来开始侦听连接请求 接收连接请求时要 调用 C a s y n c S o e k e t :A c c p e t (3)创建一个 C s o c k e t F i le 对象,并将其与 C s o c k e t 对象相关联(4)创建一个 C a r c h i v e 对象来接收或发送数据 C a r c h i v e 对象要与 C s o c k e
10、 t F i l e 对象相关联 (5)使用 C a r c h i v e 对象在客户机与服务器套接字之间传递数据 可以使用插入操作符()和析取操 作符()往C a r c h i v e 对象读写数据 当将所有想发送的数据都写入C a r c h i v e 对象时,需要调用 C a r c h i v e:F l u s h来刷新缓 冲区 (6)关闭 C a r c h i v e,C s o c k e t F i l e和 C s o c k e t 对象 许多情况下,S o c k e t 编程不再是必不可少的 因为Wi n l n e t 类、I S A P I 编程和A c t
11、 i v e X控件在网络编 程方面越来越体现出强大的功能 2 W i n l n e t Wi n l n e t 是一个 比 Wi n S o c k e t 高一层次的 A P I,但它只适用于 Hnr P、F T P和 G o p h e r的客户端程序 2 1 的 Wi n l n e t 的类(1)C in t e me t S e s s io n 类 任何使用 Wi n l n e t 类的应用程序必须拥有一个 C in t e me t S e s s io n类对象,该 对象用于创建并初始化一个或几个 I n t e r n e t 会话,必要的话还处理与代理服务器的连接
12、如果应用程序 需要有一个 I n t e me t 会话,那么应该在 C w in A p p 派生的应用程序中添加一个 C i n t e me t S e s s io n 成员(2)连接类 如果要对位于服务器上的文件执行特定的操作,那么需要与服务器建立适当的连接 对于每一个 特定 的协议,要使 用 C i n t e r n e t C o nne c t i o n派 生类,可 以用 C i n t e r n e t C o nne c t i o n的成 员 函数 G e t F t p C o n n e c t i o n,G e t Go p h e r C o nne e
13、t i o n和 G e t Ht nne c t i o n 来创建这些对象 (3)文件类 为了使应用程序能与各种 I n t e me t 协议一起协调工作,MF C提供许多从 C in t e me t F il e 派生 的文件类 (4)异常类Wi n l n e t 类的许多成员函数在发生错误时都会引发异常,这些异常由 C in t e r ff e t E x c e p t io n 处理 应用程序中可以通过调用全局函数 A f x T h r o w l n t e me t E x c e p t io n 来引发一个这样的异常 2 2 应用程序举例 下面是一个应用 V C+
14、6 0制作的一个 I n t e me t 查询应用程序,这个程序通过一个弹出对话框来指 定 目的站点,从而进行访 问(1)选中MF C A p p w i z a r d(e x e),填入程序名称 My F i le,并选择路径,再在对话框中选 A b o u t b o x,以 及 3 D C o n t r o ls,再采用默认值,最后点击完成(2)打开 R e s o u r c e V i e w,选中D ia lo g 双击打开,将 I D改为 I D D 一 唧一 D I A L O G,然后将 T o D o 静 维普资讯 http:/ 5 8 成都 大学学报(自然科学版)第
15、 2 2卷 态文本框删除,另加两个静态文本框,其 C a p t io n分别 h o s t,o u t 再加入两个编辑框,I D分别是 I D C H O S T E D I T,I D C O U T E D I T,再为这个对话框定义一个类,双击此对话框,然后选取 C d i a l o g,其他为 默认值,出现 MF C C l a S S Wi z a r d 界面,加入消息处理表,单击 Me s s a g e Ma p s 标签,在 C la s s n a lT l e 中选中 C h t t p D i a l o g,并在 O b j e c t I d s中选 中 I
16、D O K,此时,右击的 Me s s a g e s中将 出现 B N C L I C K E D和 B N D L EC L I ,选择第一个,双击,接受名称,单击 OK (3)在 H t t p 对话框中加入变量与编辑控件相连,单击 Me mb e r V a r ia b l e s 标签,选 中 I D C H丌 P S I Z E E DI T,并单击 Ad d Va r i b l e 按钮,加入变量名 r n h ost,并选变量类 型为 C s t r i n g 再用同样的方法,将 I D C S E L E C T S I Z E E D I T与 r n o u t 相
17、连,在 C h t t p D ia lo g c p p中加入如下代码:#in c l u d e“a f x i n e t n”,在出现的对话框中加入 T r y U R L函数,然后在 O n O K函数中加入代码:v o i d Ch t t p Di a l o g:On Ok r I 1 )DO:Ad d e x t r a v a l i d a t i o n h e r e Cs t r i n g h t t p:”h t t D:f Up d a t d D a t a(TR U E);r nout ”;Up d a t e D a t a(F AL S E);T r
18、y UR L(h t t p+r n h ost);T r y URL(h t t p+”WWw”十r n h ost);C D i a l o g:0n 0K();再在 T r y U R L函数中加入如下程序清单:v o i d C h t t p Di a l o g:Tr y URL(C s t r i n g URL)Ci n t e me t S e s s i o n s e s s i o n;1T I o u t=”t r i n g”+URL+”r n”;Up d a t e D a t a(F AL S E);Ci n t e r n e t Fi l e f i l e
19、=NUL L;Tr y f i l e=(C l n t e me t F i l e )s e s s i o n Op e n UR L(URL);c a t c h(C l n t e me t E x c e p t i o n P E x)f i l e=NULL;p E x 一 D e l e t e();I f(fi l e)C s t r i n g s e l e F o r(i n t I=0;I Re a d S t r i n g(s e l e);I+)r n o u t+=s d e 十”r n”;f i l e 一 C l o s e();d e l e t e
20、f i l e;Up d a t e D a t e(F A L S E);维普资讯 http:/ 第 1 期 蔡长安:vC+6 0中的网络编程方法 5 9 这样可执行这个应用程序 3 I S API I S A P I 是微软提供的面向We b 服务的专用 A P I,它能实现 C G I 的全部功能,并在此基础上作了扩 展 I S A P I 的原理与 C G I(公共网关接口)大体上是相同的,都是通过交互式网页取得客户输入信息,然 后交服务器后台处理 I S A P I 建立的程序是动态链接库,它不仅可以像 C HI 程序那样被客户请求激活,而且还可以预先激活来监视客户输入由于 D L
21、L可以和服务器装于同一地址空间中,因此执行效率要 比 C GI 程序要高MF 把 I S A P I 封装成如下 5个类:C h t t p F i l t e r:过滤要传送给 I S A P I 服务器的 HI P P请求 C h t t p F i l e t e r C o n t e x t:管理 H T TP过滤器的上下文 C h t t l:e r v e r:通过处理客户请求来扩展 I S AP I 服务器 的功能 C h t t p S e r v e r C o n t e x t:管理 I S A P I 服务器扩展的上下文 C h t ml S t r e a n :用
22、于管理内存中的 HT ML 应用程序中必须有一个从 C h t t p S e r v e r 或 C h t t p F i l t e r 派生的服务器类 或过滤类,这就像一般的应 用 程序中必须有一个派生 自C w i n Ap p的类一样每个动态链接库 只有一个实例,每个服务器应用程 序与 客户的接 口通过它 自己的适 当上下文类实例实现 I S A P I 扩展向导与 Ap p Wi z a r d 类似,可以帮助生成扩展和过滤使用这一 向导,选择菜单 F i l e、Ne w,然后选择 P r o j e c t 页,选择 I S A P I E x t e n s i o n W
23、i z a r d,填写工程名和 目录名,然后点击 OK按钮 如果选择 生成过滤,可选择下一步生成文件之前,Ap p Wi z a r d最后显示确认对话框如果 同时生成服务器 和过 滤,将生成 l 1 个文件,其中包括 C h t t l:e r v e r 和 C h t t p F i lt e r 的派生类源文件和头文件 有了这个向导,就 可编写过滤 了,而且每个消息的响应函数也都生成了例如,过滤类有一个 O n En d 0f Ne t S e s s i o n()函数,当当前服务器的一个客户任务结束时就会调用这个函数,向这个函数中添加代码就能处理登录、监视及 其他事件 过滤结束后
24、,手工编辑注册表就可以使用服务器应用程序 自动运行动态链接库 函数完成后,把动态链接库放在服务器应用程序的可执行目录中,一般是 C G I 程序所有目录,并调 整 we b网页相应位置,增加到动态链接库的链接 4 A c t i v e X控件 A c t i v e X是一个开放平台,允许开发者为 I n t e me t 或 I n t r a n e t(企业内部网)创建动态内容和应用程 序 A c t i v e X控件是容器中使用的交互式对象,可以插入到We b页或任何 A c t iv e X控件容器中 在 MF 类库中C o l e C o n t r o l 类是开放 A c
25、t i v e X控件的强有力的基类 由于 C o l e C o n t r o l 类是从 C w n d 类派生的,因 此,Ac t i v e X控件具有 Wi n d o w s 窗 口对象所具有的全部功能 可以使用 MF C A c t i v e X C o n t r o l Wi z a r d来 生成 A c t iv e X控件的框架文件,然后使用 C l a s s Wi z a r d 来定义控件的属性、方法和事件 Ac t i v e X文档使用户可以在 We b浏览器或者其他控件容器的整个客户 区中查看文档MF C类库使 用 C Ao c Ob j e c t S
26、 e r v e r 和 C d o c O b j e e t S e r v e r l t e m类来支持 Ac t i v e X文档C Ao e O b j e e t S e r v e r 映射 A c t i v e X文 档接 口,初始化并激活一个 A c t i v e X文档 MF C还提供宏来处理 A c t i v e X文档中的命令发送 要在应用 程序中使用 Ac t i v e 文档,必须在 S T D A F X H文件中用#i n l u d e 语句包含 A F X X)C OB H在 I E 3 0以后 的版本中,把 A c t i v e X控件加入到已
27、知的网页中只需要一个简单的标记 H T ML语言的(o B J E c r)标记 就可把 Ac t i v e X控件加入到网页中 5 As y n c h r o n o u s M o n i k e r s Mo n i k e r s 是在基于对象的系统中引用一般数据或引用一个对象方法,它具有两个重要特点:一是可 以被保存为永久存储,二是支持绑定操作 异步 Mo n ik e r s 能完成异步绑定,执行网络异步访问 维普资讯 http:/ 6 0 成都大学学报(自然科 学g t)第 2 2卷 在 MF C类库中,C a s y n c Mo n i k e r F il e 使用 I
28、 m o n i k e r 接口来异步访问任何数据流,包括从 U R L异步装 载文件 A s y n c h r o n o u s Mo n i k e r s 主要用在 I n t e r n e t 应用程序和 A c t i v e x 控件中,以便在文件传输期间提 供响应界面给用户 以下是使用 Mo n i k e r S 下载文件的主要过程:(1)声明从 C a s y n c Mo n u k e r F i l e派生的类 (2)覆盖成员函数 O n D a t a A v a i l a b l e 以便显示数据 当数据可用时,O n D a t a A v a i l
29、a b l e 提供数据给客 户 (3)覆盖其他成员函数,如O n P r o g r e s s,O n S t a r lB in d i n g 和 O n S t o p B in d in g (4)声明类对象并用它打开 UR L 例如:C my As n c M o n Fi l e m a mf:M a n d O p e n(一 T(h t t p:w ww y c t c e d u o n)参考文献:1 齐舒创作室 V i s u a l c+6 0编程技巧与实例分析 M 北京:中国水利水电出版社,1 9 9 9 【2 木林森等 V i s u a l c+6 0 使用与开发【M 北京:清华大学出版社,1 9 9 9 3 兰芸 V i s u a l c 十+6 0 编程实例精解 M 北京:北京希望电子出版社,2 0 0 0 维普资讯 http:/