- 1、本文档共443页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
14.2.2 主要功能函数介绍 前面已经介绍过,在MFC中,CAsyncSocket和CSocket类封装了Windows Sockets API函数。本节将结合套接字的创建和使用过程,介绍无连接通信中,使用的CAsyncSocket类的主要成员函数(CSocket类由CAsyncSocket类派生)。 1.WinSock环境的初始化 在使用WinSock MFC类之前,必须为应用程序初始化WinSock环境。其实现只要调用全局函数AfxSocketInit即可。如下面的代码: 同时,在“stdafx.h”文件中添加如下代码: 如果在使用MFC AppWizard[EXE创建MFC工程时,在MFC AppWizard Step 2对话框选择“Windows Sockets”选项,则程序回自动添加上面的代码,实现WinSock的初始化。 2.创建Socket 创建Socket,首先需要构造Socket对象,而后调用Create函数创建Socket。Create函数原型如下: 各参数含义如下: nSocketPort:为使用的端口号,默认为0,表示由系统自动选择,通常在客户端都使用这个选择。 nSocketType:为使用的协议族,默认为SOCK_STREAM,表示使用面向连接的流服务;为SOCK_DGRAM,表示使用无连接的数据报服务。 lpszSocketAddress:为本地的IP地址,可以使用点分法表示如“”。 2.创建Socket 也可以通过使用Bind函数设置Socket的地址和端口号,如下: 表示该Socket对象的地址为“168.0.1”,端口为4800。 通过Socket提供的send()和Receive()函数可以实现任何类型数据的发送和接收。 3. 发送、接收数据 通过Socket连接发送和接收数据比较简单。可以用Socket发送任何类型的数据,只需要一个指向存放数据的缓冲区指针即可。发送时,缓冲区存放待发送的数据;接收时,接收的数据将拷贝到缓冲区。 (1)发送数据 可以使用Send函数通过Socket连接发送数据,函数的原型如下: 各参数含义如下: lpBuf:指向发送数据缓冲区的指针,如果数据为CString变量,可使用LPCTSTR操作符把CString变量作为缓冲区传送。 nBufLen:指明缓冲区要发送数据的长度。 nFlags:该参数是可选的,用于控制消息的发送方式。 函数执行成功,返回发送到对方应用程序的数据总量。如果有错误产生,函数返回SOCKET_ERROR。 3. 发送、接收数据 (2)接收数据 Socket接收数据时,就需要调用Receive函数。Receive函数原型如下: Receive函数的参数与Send函数基本相同,lpBuf为缓冲区指针,指明接收数据存储的位置,参数nBufLen是缓冲区的长度,指示Socket能存储多少数据。nFlags为标记位,收发双方需要指明相同的标记。 执行成功后,Receive函数也返回接收到的数据的数据量。如果有错误产生,函数返回SOCKET_ERROR。 3. 发送、接收数据 有一点需要说明,在接收数据时,最后一个字符后面最好设置一个NULL字。因为缓冲区中可能会有一些垃圾数据,如果接收的数据后面不加NULL,应用程序可能会把这些垃圾数据作为接收数据的一部分。如下面的实现代码: 对于无连接通信,即数据报类型的Socket,发送和接收数据还可以使用SendTo和ReceiveFrom函数,其功能和使用与Send和Receive函数基本相同。 13.7.1 同步访问对象 同步访问对象提供了对同步对象的封装。同步访问对象分为两种,分别是CSingleLock和CMultiLock。 1.CSingleLock 如果一次只需要等待一个同步对象,可以使用CSingleLock类的对象。CSingleLock类的构造函数如下: pObject:表示同步对象指针。该参数不能为NULL。 bInitialLock:表示是否在初始化时对同步对象进行访问。 如果想要获取同步对象,可以使用Lock()函数。该函数的原型如下: dwTimeOut:表示同步对象等待的时间。 13.7.1 同步访问对象 如果想要释放同步对象,可以使用Unlock()函数。该函数的原型如下: lCount:表示要释放的对象数。 lPrevCount:表示同步对象接收的前一次的个数。 如果想要判断等待的同步对象是否被锁定,可以使用IsLocked()函数。该函数的原型如下: 13.7.1 同步访问对象 2.CMultiLock 如果在某个特定的时刻要使用多个同步对象,可以使用CMultiLock类的对象。CMultiLock类的构造函
您可能关注的文档
- B受体拮抗剂及钙离子拮抗剂在心血管临床应用进展详解.ppt
- B型钠尿肽的临床意义详解.ppt
- C#程序设计详解.doc
- C#期末考练习题详解.doc
- C#调用存储过程简单完整例子详解.doc
- c(科学用脑、心态调整和考前家长心态)详解.ppt
- C++(朱立华)-第01章-概述详解.ppt
- C++程序设计详解.ppt
- C++实验报告详解.doc
- C8-Lookforward-以港行事业单位为例探究党员毕业生的综合竞争力详解.pptx
- 初中生态意识培养从生物多样性调查到环保行动教学研究课题报告.docx
- 跨境电商物流海外仓多区域布局优化策略研究报告.docx
- 技术标准规制对企业加成率的影响——基于中国制造业出口企业的经验分析.pdf
- 2025山东省国际信托股份有限公司招聘8人笔试参考题库附带答案详解.pdf
- 2025年小众化消费市场细分领域增长潜力与机遇报告[001].docx
- 2025年家用医疗器械市场消费趋势分析及品牌竞争策略研究报告.docx
- 小学社会实践活动对学生自我认知的影响研究教学研究课题报告.docx
- 《精神科患者家属心理适应能力与心理健康干预策略研究》教学研究课题报告.docx
- 高中信息技术课程编程教学中问题解决能力的培养教学研究课题报告.docx
- 小学社会实践活动策划探索乡土文化与团队协作能力教学研究课题报告.docx
文档评论(0)