windows境下面向套接字编程实例_第1页
windows境下面向套接字编程实例_第2页
windows境下面向套接字编程实例_第3页
windows境下面向套接字编程实例_第4页
windows境下面向套接字编程实例_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内容预览VC+ +环境下WinSock编程及实例分析王振江(华北电力大学P河北保定071003)摘 要:Visual C+对网络应用程序开发的支持是十分强大和充分的。为了简化WinSocX网络编程.Microsoft的基木类库(Microsoft Foundation Class或MFC)提供了两种利用Windows Sockets进彳丁网络通信的编程 模式,这两种模式即为用CAsyncSockel类和派生于CAsyncSocket的CSockel类来编程。通过创建一个比较简的基于MFC WinSock类的应用程序,详细分析f WinSock编程。关键闸 WinSock:网络:CSocket最

2、近几年计算机网络的发展一日千里,人们对网络服务应用程序的要求也越来越商、越来越多。现在虽然有很多 的网络应用程序,但是在很多的情况下,需要开发适合自己便用的网络应用程序。Microsoft公司的Visual C+ +平台是一个具有廊度综合性的软件开发工具.它不仅具有很强的程序处理能力,而且还能提供多种的编程风格:与Visual C+捆绑的MFC (Microsoft Foundation Class)提供r大量的封装良好 的类使用户在使用VisualC+时有如虎添翼的感觉。Visual C+对网络应用程序开发的支持是十分强大和充分的。1, WinSock编程原理直接采用WinSock API函

3、数来编程对于初学者很不轻松,不但要记忆很多的WinSock API函数的谓 用格式,还要了解设tr WinSock网络编程的算法。对于编写Windows应用程序来说.还耍涉及复朵的消 息驱动机制,涉及事件处理函数来处理套接字发送.接收数据等事件。为了简化WinSock网络编程.使用户专注于应用程序算法的设计.Microsoft的基木类库(MicrosoftFoundation Class或MFC)提供了两种利川WindowsSockets进行网络通信的编程模式,这两种模式即为用CAsyncSocket类和派生于CAsyncSocket的CSocket类来编程。这两个类在不同程度上对WinSoc

4、k API的函 数进行了封装,在编程时使用经过封装的MFCWinSock类使编程工作大大简化.而且,这两个类都提供r事件处理函数.通过对事件处理函数进行重载用户可以在应用程序中很方便地对奁接字发送、接收数据等事件进行处理。CAsyncSocket类封装r Windows Sockets API函数提供r校低层的与Windows Sockets对话接口,一般适合于有 相、“1水平的网络编程基础者使用可方便地进行底偿的网络事件通知及信息回仙控制等操作。CAsyncSocket类是从CObject类派生而来的派生关系如图1所示。CSocket派生于CAsyncSocket,派生关系如图2所示。它继承

5、r父类中一些常用易懂的Windows Sock -ets API函数 并对CAsyncSocket中底层的较难控制的一些API函数或成员函数进行了处理,它通过MFCCArchive对6欠进行信息的接发操作使得网络传输如同使用MFC的文档连教协议(SerializationProlocol).简捷易川。同时它支持模块化的后台信息处理.解决r CAsyncSocket中校难克服的多线程处理。2实例分析下面通过一个客户机/服务器模式的网络应用程序.实现对CSocket类的派生和应用。2, 1利用MFCAppWizard生成程序框架建立基于对话框构架的应用程序填弓,程名为Cha仁在笫2步中选中Wind

6、ows Socket选框.接受其他默认的 MFCAppWizard 设置。3, 2增加控件对华、向主对话框添加控件。该应用程序是客户机/服务器-咻的.W此设置r组合框(Comb。Box)控件来抬定应用程序是作为客户机还是服务器而运行:还需耍一组编辑框lEditBox)用于输入汁算机的名称和服务器侦听的端口号,以及一个用于 启动应用程序对socket的侦听.或扑开与服务器连接的按饥tButton)控件。为了输入字符串及示发送的字符串.需要 一个编辑框控件用来输入要发送的消息以及用于发送此消息的按钮控件:还需要一对列表框控件.用于显示发送和接 收的消息。在MFCCIassWizard中.将对话框中

7、的控件和变S相关联.如表2所示。4, 3添加消息映射函数为了区分应川程序是用于服务器还是客户机,用户在选择组合框内容后,连接”按钮随用户的选择而改变。用对 组合框选区内容改变的事件一 CBhCSELCHANGE-产生消息映射函数。在MFC Classwizard中,对ID_C0VB0_TYPE添加针对CBhUSELCHANGE事件的函数。并编辑该函数。5, 4 从 CSocket 承为了应用程序能够捕获并响应socket事件,应该创建川户自己的从CSocket类继承的派生类这是WinSock编程的基础,W为所有的WinSock应川程序都是间接地利用MFC的WinSock类,用户应该根据自己应用

8、程序的特点,从MFC提供的WinSock类派生出自己需嬖的WinSock类。该类需要一种于段以便把Socket事 件传递给类对象所属的对话框.还需要有自己的事件处理函数在MFCCIassWizard中.创建新CMySocket. Baseclass选择CSocketo在CMySocket头文件中类定义之前,加入: class CChatDIg:在Socket类中添加一个成员变g,用作指向父对话框窗口的拆针:public:在Socket中添加事件处理函数,用于调用对话框中名称类似的那些函数。对于服务器功能要针对OiLccepl事件为Socket类添加一个事件处理函数:在Sockel类中添加了所有

9、的必要事件处理之后,应该向对话框添加Socket类的变址对轨 对于服务 器功能,在对 话框中应该需嬖两个套接字,一个用于侦听连接请求,另一个用来被连接到另一个应用程序:对于客户机功能,只需要 一个用于连接的套接字就可以ro W为对话框需要两个套接字对侨以需要向对话框类(CChatDIg)中添加两个成员变虽。 两个成员变fi的类型均为奁接字类(CMvSocket) 。其中川 于侦听请求的变S命名为m sListenSocket,把用于发送和接收消息的变S命名为m. sConneclSocke仁在添加了套接字变fi后.需要为对话框类中所有的变a添加初始化代码。作为缺省设把应用程序 的类型设宜为 客

10、户机“,把服务器名设g为localhosb端口值设置为8000,除了这些变还需要把两个 金接字对纵中的父对话框拆针设g为指向:勺前对话框。上述操作在对话框类中的OnlnitDialog C)函数中实现。2- 5建立客户机与服务器之间的连接打开Classwizard.为“连接按钮的BN CLICKED事件添加事件处理函数.编辑该函数。 voidCChatDIg: : OnBtnConnect ) / TODO: Add your control notification handler codehere/ /从对话框取回数据UpdaleData (TRUE):/ /是“客户机”还趁服务器” ?i

11、f m_cmbType- GetCurSel C) =0) / /服务器创建与设a的端口绑定的套接字m. sListenSocket-ListerO:开始侦听连接请求m sListenSocket. Listen 件处理函数。voidCChatDIg: : OnAccept C m. sListenSockel, Acce pl(m. sConnectSocketh2. 6发送和接收数据在实现了客户机和服务器两个应用程序相互连接之后.下一步要做的就是在两个应用程序之间实现消息的发送和 接收。如果两个程序建立了连接,用户就能够在对话框窗口中部的编框中输入文木消息热后敢击”发送“按钮, 可以把消息

12、发送到另一个应用程序,消息被发送出去后.将被添加到已发送消息的列 表框中。要实现上述功能1片发 送按钮被笊击之后,应用程序需要检查是否有消息输入了编辑框,获取 该消息的长度并发送该消息,然后把此消息 添加到列表框中0为了在程序中添加此功能,便用ciass-Wizard向发送”按钮的敢击事件(BN CLICKED)添加一个事件处理函数注总不要接受默认的函数名,将函数名改为OnSendMsg ()(这样处理后.就屏蔽了基于对话框的应用程序对回年键的默认功能输入”回午键”后,消息被发送)编辑该函数如下:voidCChatDIg: : OnSendMsg C int nLen: / /消息长度intn

13、Send: 已发送消息的长度UpdateData (TRUE);获取消息长度nLen=mstrMsg. GelLength UpdateData (FALSE):对于消息的接收方套接字的OnReceive事件被触发时表明一个消息已经到达了,可以用Receive()函数从套接字检索到该消息。如果消息被顺利检索到,需要把接收的字符数组转换成CString类空,并把接收的消 息添加到已接受的消息的列表框中。通过编辑对话框类(CChatDIg)的OnReceive ()函数,可以添加该项功能如下:voidCChatDIg: : OnReceive )char*pBuf=newchar 1025:int nBufSize = 1024:int nReceived;C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论