基于TCPIP协议的WinSock网络编程及应用.pdf

上传人:asd****56 文档编号:70331953 上传时间:2023-01-19 格式:PDF 页数:3 大小:144.09KB
返回 下载 相关 举报
基于TCPIP协议的WinSock网络编程及应用.pdf_第1页
第1页 / 共3页
基于TCPIP协议的WinSock网络编程及应用.pdf_第2页
第2页 / 共3页
点击查看更多>>
资源描述

《基于TCPIP协议的WinSock网络编程及应用.pdf》由会员分享,可在线阅读,更多相关《基于TCPIP协议的WinSock网络编程及应用.pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、计算机时代 2 0 0 4 年 第 7 期 2 9 基于T C P I P协议的Wi n S o c k 网络编程及应用 程咏喜,蒋珉(东南大学 自动化研究所,江苏 南京 2 1 0 0 9 6)摘要:本文介绍了以T C P I P为基础,基于客户机 服务器(C S)模型,在 Wi n 2 0 0 0平台、V c+6 0环境下利用Wi n d o ws 套接字(S o c k e t)进行网络编程的相关技术,并应用于车间自动化生产,实现 了上、下位计算机之间有效的数据传输:关键词:T CP I P;套接字;客户机 服务器;网络编程;数据传输 1 W i n d o ws So c k e t

2、s 长久以来 Wi n d o w s 套接字(S o c k e t s)-直是以 T C P P为基 础的网络编程的一种重要实现方式。套接字是通讯的基石,是 支持 T C P P 协议网络通信的基本操作单元,可以将套接字看 作是网络上不同主机的进程进行双向通信的端点。目前套接字 已成为最流行的网络通信应用程序接口之一,已经形成了一套 完整的标准,即 Wi n d o w s S o c k e t s 规范,简称 Wi n S o c k。Wi n S o c k 规范定义了一套可使网络程序开发人员在 wi n d o w s 下开发标准的 T C P P网络程序接口,它不仅包含人们所 熟

3、悉的 B e d e y S o c k e t风格的库函数,还包含了一组 针对 Wi n d o w s的扩展库函数,以使程序员能充分地利用 Wi n d o w s 消息驱动机制、异步网络事件选择方式进行编程。Wi n S o c k 规 范定义并记录了任何使用 A P I 与 I n t e me t 通讯协议(I P S,通常 指 T C P I P)连接。应用程序使用 Wi n d o w s S o c k e t s 的 AP I,而 Wi n d o w s S o c k e t s 又利用下层的网络通信协议与操作系统以产 生实际的通信,它们之问的关系如图 l 所示。网络程序

4、接口(Wi n d o w s S o c k e t s)i i 网络通信程序接口(T C P P):操作系统 图 1 应用程序与Wi n d o w s S o c k e t s 关系图 提到在 T C P I P 协议下利用 Wi n S o c k 进行网络编程,自然 就会涉及到 C S(客户机 服务器)模型。一般说来,在 T C P I P 网络中两个进程之间的相互作用的模式是 C S 模式,在这种操 作模式下,服务器要先启动,客户应用程序向服务器程序请求 服务,然后服务器响应客户请求并提供相应服务,这种方式隐 含了在建立 C S问通信时的非对称性。2 CS o c k e t 网

5、络编程 MF C提供了两个 Wi n d o ws S o c k e 封装类,即 CA s y n c-S o c k e t和 C S o c k e t。它们使编程工作变得相对简单,尤其是 CS o c k e t,它派生自 C As y n c S o c k e t,继承了 C As y n c S o c k e t的许 多封装了 A P 1的成员函数,提供了通过 C A r c h i v e 对象使用套 接字更高级抽象,并且管理了通信的大多数方面。更重要的是 C S o c k e t 类提供了对于同步操作 C A r c h i v e对象十分重要的阻 塞功能,且 CS o

6、c k e t通过与类 CA r c h i v e和 C S o c k e t F i l e一起来 管理数据的接收和发送,使我们在设计时不需考虑网络的位顺 序和字符问的转换问题,从而收发数据变得简单明了。对于套接字来说,其归档对象是与 C S o c k e t F i l e对象相关 的而非标准的 C F i l e,与连接到一个磁盘文件不同,C S o c k e t F i l e 对象连接到 C S o c k e t 对象。一个 C A r c h i v e 对象将负责管理一个 缓冲区。当发送归档对象的缓冲区被填满时,相关的 C S o c k e t-F i l e 对象将

7、缓冲区里的内容取出,清空与套接字相关的归档缓 冲区与发送信息等价。当接收归档对象的缓 冲区被填满时,C S o c k e t F i l e 对象停止读出直到缓冲区可用。C S o c k e t 对象实际上是个两态对象,即有时同步有时又异 步,但通常情况下是异步状态。在异步状态,套接字能够接收来 自框架的异步通信,但在操作过程中,如数据接收或发送时,套 接字就切换到同步状态。这就意味着套接字将不能接收其它异 步通信,直到同步操作完成。下 面 简 要 介 绍 利 用 C S o c k e t,并 结 合 C S o c k e t F i l e和 C A r c h i v e 对象进行

8、 C S模式下计算机之间通信的一般网络编 程模型,注意它只适用于 S t r e a m套接字,这主要是因为 D a t a-g r a m套接字不能使用 C A r c h i v e。1、分别构造服务器和客户端套接字对象;2、调用套接字对象的 C r e a t e函数创建套接字,而 C r e a t e 函数会调用 B i n d函数将此套接字绑定到指定的地址,并为服 务器套接字指定端口号;3、服务器调用 L i s t e n函数开始侦听客户的连接请求,而客 户调用 C o n n e c t函数向服务器发出连接请求;4、当服务器侦听到客户端连接请求时,就创建一新套接 字,并将其传送

9、给 A c c e p t 函数以接收客户请求;5、为服务器和客户端套接字分别创建一个与之相关联的 CS o c k e t F i l e 对象:6、为服务器和客户端套接字分别创建一个(或两个)与 C S o c k e t F i l e 对象相关联的 C A r c h i v e对象以进行数据的接收和 发送工作;7、使用 C A r c h i v e对象在服务器和客户端套接字之 间传送 数据;8、在任务执行完毕后,将 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 一并销毁。维普资讯 http:/ 3 0 Co mp ut

10、e r Er a No 7 2 0 0 4 C S o c k e t 与 C S o c k e t F i l e,C A r c h i v e 相结合的完整编程步骤 如图2所示。图 2 C S o c k e t 模型编程步骤 对于 C S o c k e t,处理网络事件通知函数 O n A c c e p t()、O n R e-c e i v e 0 和 O n C l o s e 0 依然可用,这可以通过重载基类对应的函数 即可,但永远不要试图调用 O n C o n n e c t 0 和 On S e n d 0。这时需要 调用 C o n n e c t()来与服务器进行

11、连接,但这种调用会发生阻塞,它要一直等到成功地与服务器建立了连接或者有错误发生才 返回。这是由于 CS o c k e t 类的缺省方式是阻塞方式的缘故造成 的。如果这时采用多线程技术,为调用 C o n n e c t()建立一个工作 线程,则在调用该函数发生阻塞时,主线程就不会受其影响 同 样,可以为数据接收和发送创建工作线程,该工作线程可以在 后台运行,套接字在工作线程中的阻塞不会影响到主线程 中的 其它活动,可以继续处理其它诸如 Wi n d o w s 窗口和消息事件 但在实际运用多线程进行网络编程时,必须考虑套接字对象的 同步问题,对套接字调用时,如果不进行同步将可能导致不可 预测

12、的结果。3 实 际应 用 某制造企业光电管生产车间,由置于现场的计算机(下位 机)通过数据采集卡采集产品生产过程中各检测点及控制点,并将获得的及进行初步处理的数据上传给管理计算机(上位 机),上位机在收到传来数据后及时分析并作出相应处理,然后 发送指令给下位机,由下位机处理控制现场产品生产 结果表 明,采用这种方式能有效的控制现场产品生产的质量,提高产 品单位时间生产效率,有效控制单位产品成本。本系统的实现采用本文介绍的通过使用 C S o c k e t 并结合 C S o c k e t F i l e,C A r c h i v e 等 MF C类实现了上、下位计算机之间的 数据通信,以

13、下是网络通信关键步骤代码。3 1服务器端 3 1 1套接字创建、侦听连接、新建一套接字接受连接 v o i d C C h a r i 0 t D lg:On C r e a t e()U p d a t e D a t a 0;mS o c k e t=n e w C L is t e n i n g S 0 c k e t(t h is):if(m p S o c k e t 一 C r e a t e(4 O O O)指定端口创建 if(m p S o c k e t 一 L is t e n()侦听连接 r e t ur n;)r et u r n;)v o id C C h a r

14、i o t D I g:On P e n d in g A c c e p t()p S o c k e t=n e w C S e r v e r S o c k e t(t h i s);if(m p S o c k e t 一 A c c e p t(p S o c k e t)接受连接请求 p S o c k e t 一 O n l n i t i a t e 0;mn C o n n L i s t A d d T a i l(p S 0 c k e t):)else d el e t e pSo ck et;)3 1 2 接 歧数据和 笈送数据 v o id C S e r v e

15、 r S o c k e t:On R e c e iv e(i n t n E r r o r C o d e)C S o c k e t:O n R e c e i v e(n E r r o r C o d e);d 0m p D I g 一 S e r ia l iz e(m p A r c h i v e l n);序列化接收数据 if(m p D Ig 一 m p S 0 c k e t)=N U L L)r e t u r n:)wh i le(!m p A r c h iv e l n 一 ls B u ff e r E mp t y O)v o id C S e r v e

16、r S o c k e t:O n P e n d i n g S e n d()if(m p A r c h i v e Ou t!=N U L L)m p D Ig 一 S e r ia li z e(m p A r c h iv e O u t);mp A r c h i v e Ou t 一 F l u s h();循 环接 收 序列化发送数据)只有调用此函数,才能真正在网络上发送)3 1 3 初 始 化 函 数 v o i d C S e r v e r S o c k e t:O n l n i t i a t e()对象初始化 m p F i le=n e w C S 0 c k

17、 e t F _ le(t h i s):mp A r c h iv e l n=n e w C A r c h iv e(m p F i l e,C A r c h iv e:lo a d);mp A r c h iv e Ou t=n e w C A r c h i v e(m p F i le,C A r c h i v e:s t o r e);)3 2 客户机端 实际上客户端程序和服务器程序相似,同样要创建套接字 并进行接收和发送数据(代码就不列出),不同的是在进行数 据传输之前,要进行和服务器端的连接。B OO L C C h a r io t D Ig:O n C o n n e

18、 c t i o n()U p d a t e D a t a 0;mp S o c k e t=n e w C C l ie n t S 0 c k e t(t h Is):if(m p S o c k e t 一 C r e a t e()创建 if(!m S o c k e t 一 C o n n e c t(m ip a d d r e s s,4 0 0 0)指 定 I P地 址 和 端 口 d e l e t e m p S o c k e t;创建失败则删除 mp S0 c k e t=NULL:r e t ur n F AL SE;),(下转第4 0 i)维普资讯 http:/

19、 4 0 Co mp ut e r Er a No 7 2 0 0 4 和 Or a c l e数据库中:5使用 Or a c le Ob je c t s f o r OL E访问 O r a c le数据库 Or a c l e公司提供了一个 Or a c l e Ob j e c t s F o r OL E的技术(简称 0 0 4 0),使 V i s u a l B a s i c 及 B c+、V c+等 3 G L高级语 言对 O r a c l e 数据库进行访 问成为可能 O r a c l e 的 O L E对象(0 0 4 0)是一种进程中的 O L E服务器,它提供了一

20、种对象层 次结构,与 D A O非常相似,但却不采用 O D B C标准。它利用 O r a c l e的调用接L=】来与 O r a c l e 会活,其中 Or a c l e的调用接口是 一种本地代码驱动器,它仅用于访问 Or a c l e数据库。0 04 0拥 有优异的功能性访问 O r a c l e 数据库,其他任何数据库访 方式 很难达到它的功能性。O r a c l e O b j e c t s f o r OL E主要可用的对象列示如下:Or a C li e n t定义一个工作站客户,它能对所有 O r a S e s s i o n 对象进行管理。和 D AO的 DB

21、 E n g i n e建立方式一样,O r a C l i e n t 对象系统通常会根据需要而 自 动建立。O r a S e s s i o n V B应用程序和 O r a c l e 服 务器的接 J,管理 O r a D a t a b a s e 集,提供了共享连接及事务控制功能。O r a C o n n e c t表示一个与 O r a c l e 数据库的单一连接。O r a D a t a b a s e表示一个实现连接的数据库。Or a P a r a me t e r表示一个在 S QL语句或 P L S QL块中的变 量。O r a P a r a m e t e

22、r对 象 间 接 地 通 过 O r a D a t a b a s e对 象 的 O r a P a r a me t e r s 数据集合来增加、存取或删除某个变量。Or a D y n a s e t S Q L S e l e c t 语句的查询结果:Or a F ie l d O r a Dy n a s e t 对象中的一列(C o l u mn)或数据项目 (d a t a i t e m)。O r a F i e l d对 象 是 间 接 从 O r a D y n a s e t对 象 的 O r a F i e l d s 数据集合(c o l l e c t i o n)

23、取得其中的一个字段的数据。下例代码显示如何使用 0 04 0访问 O r a c l e数据库:。Or a c l e对象定 义 D im O r a S e s s io n A s Ob j e c t D i m O r a D a t a b a s e A s Ob j e c t D i m O r a R e c o r d s e t A s Ob j e c t C o n s t C o n n e c t S:”u s e r l p a s s l”C o n s t D a t a b a s e N a me$:”OR ASE R VE R”Di m wz As I

24、 n t eg er On E r r o r Go T o e r r H a n d le (上楼 第 3 0页)els e mp S o c k e t 一 On l n it ia t e(m p S o c k e t);r e t u r n T RU E;)以上是通信的一些关键步骤,还须添加一些辅助代码以完 善程序,尤其要注意创建的套接字对象在退出前要析构,在堆 中刨建的对象也要删除(这一步很重要,否则会造成堆内存泄 露、堆内碎块等问题)。4结束语 利用 C S o c k e t 类并结合 C S o c k e t F i l e、C A r c h i v e 类是实现网

25、络编程进行数据传输的有效手段,使用方便。如果能将多线程 S e t 0r a S e s s io n:C r e a t e O b j e c t(Or a c le l n P r o c S e r v e r X Or a S e s s i o n )创建 S e s s io n对象 Se t Or aDat ab a se:Or a Se s sion Op enDa t a ba s e (D a t a b a s e N a me$,C o n n e c t S,0 )建立数据库连接 Se t Or aRe c or ds e t:Or aDa t ab as eCr

26、e at eDvn a se s ele c t f r o m U h g l”,0 )生成对表Ly h g l 的查询 e r r H a n d le:。出错处理 wz:I n s t r(Er r Oe s c r i p t i o n,”OR A一”)l f wz 0 The n S e le c t C a s e Mid(E r r D e s c r i p t io n,w z+4,5)Cas e”01 01 7”Ms g B o x”数 据库配置 的用户名或 密码 不正确!”,1 6 ”错 误”Ca s e”1 2 1 5 4”Ms g B o x”配置的 网络服务 器不

27、正确!”1 6,”错误”Ca s e”01 0 3 4”Ms g Bo x”数据 库未启动!“,1 6,”错误”Ca s e Els e Ms g B o x E r r D e s c r i p t io n,1 6,”错 误”En d Selec t Els e Ms g B o x E r r D e s c r ip t i o n,1 6,”错 误”En d l f 6结束语 在 VB中实现访问 Or a c l e数据库的方式有多种:DA O适 用初学者学习数据库技术;A D O速度快、功能强大;Or a c l e D a t a C o n t r o l 使用简单,但代码编

28、写不方便;0 0 4 0是 O r a c l e 的最 佳典型性产品,它所支持的 O r a c l e 功能比其他产品要多,是一 个稳定而成熟的开发环境,目前基于 Or a c l e数据库的用 V B程 序语言开发的应用系统基本上都是通过 00 4 0来实现的=参考文献:1 1李善茂等V i s u a l B a s i c 60高级编程技巧 电子工业出版社,1 9 9 9 2】潭小丹等 Vis u a l B a s i c 6 0数据 库编程 思想 与实 践 冶金 工业 出版 社,2 0 0 2 技术引入到 C S o c k e t 网络编程中以有效的避免阻塞的活,那么 C S o c k e t 将是更好的选择。多线程网络技术在开发基于 T C P I P 的分布式应用程序中将发挥更大的作用。参考文献:1】邓全 良Wi n S o c k网络程序设计 中国铁道出版社,2 0 0 2 2】汪晓平,钟军 V is u a l C+网络通信协议分析与应用实现 人民邮电 出版社,2 0 0 3 3】萧秋水,文娟 Wi n d o w s 网络编程V C篇 清牟土学 出版社,2 0 0 1 【4】王刚,林 立志 基寸 Wi n d o w s的 T C P AP编程 清牟 大学出版社,2 oo2 日 许 算 机 时 代 维普资讯 http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁