网站大量收购独家精品文档,联系QQ:2885784924

Winsock多客户机通信实验报告.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
华中科技大学 电子与信息工程系实验报告 - PAGE 2 - - PAGE 1 - 实 验 报 告 实验名称 Winsock多客户机通信 课程名称 计算机网络 实验目的 掌握网络应用程序的开发方法; 掌握Client/Sever结构软件的设计与开发方法; 掌握Socket机制的工作原理。 掌握Socket非阻塞编程方法。 实验环境 操作系统:Windows XP / 7 编程工具:Visual Studio 2010 / VC6.0 实验内容与结果 程序整体功能: 程序的整体功能是利用Windows Socket的网络程序设计接口实现一个Client/Sever结构,在TCP非阻塞编程的基础上实现单Sever、多Client的双向通信,以及多Client之间的通信。 程序组成及各模块/函数功能: Extern_socket_sever.cpp: main函数以及sever初始化相关的函数,包括: bool InitMemember();//初始化成员变量。 bool InitSocket();//初始化套接字,设置为非阻塞模式。绑定并监听。 bool StartService();//开始运行接收客户端请求线程。 bool StopService();//终止服务器运行。 DWORD WINAPI CleanThread(void*param);//资源清理线程。 DWORD WINAPI AcceptThread(void*param);//接受客户端请求线程。 其中StartServive()、StopService()实际上是一系列非阻塞模式下的Socket函数的封装。 CClient.h CClient类描述文件,实现Client和Sever端通信时的数据组织,包括保存连接的状态信息、接收发送线程句柄、存储交互数据等。 类的基本结构以及成员函数功能作用如下: class CClient { public: CClient(void); CClient(SOCKET s,sockaddr_in addr); ~CClient(void); public: bool IsConnected();//判断连接是否中断。 bool DisConnect();//中断与服务器的连接。 bool calc();//计算当前时间,并复制到发送缓冲区内。 bool startRunning();//开始运行发送和接收线程。 void SetClientNum(int num); int GetClientAddr(); static DWORD WINAPI sendThread(void*param);//发送线程入口函数。 static DWORD WINAPI recvThread(void*param);//接收线程入口函数。 private: int clientNum; HANDLE m_hSendThread;//发送线程句柄。 HANDLE m_hRecvThread;//接受线程句柄。 HANDLE m_hEvent;//发送线程和接收线程同步事件对象。接收客户端请求后通知发送线程发送当前时间。 SOCKET m_socket;//与客户端连接套接字。 sockaddr_in m_addr;//客户端地址。 bool m_IsConnected; char *m_pRecvData;//接收缓冲区。 char *m_pSendData;//发送缓冲区。 bool m_IsSendData;//由于只有接收到客户端请求后才需要发送,该变量控制是否发送数据。 }; CClient.cpp CClient类的成员函数的实现,成员函数的功能如上。具体涉及建立连接、创建线程、保存连接信息、存储连接数据、销毁线程、断开连接等阶段。线程之间通过Event通信。 Extern_socket_client.cpp Socket中Client端的main函数、初始化函数以及非阻塞socket的建立、设置函数,主要职责是建立与主机连接,并且将连接信息通过CClient类进行组织。 重要的数据结构及算法 本实验中核心的数据结构是CClient类。类的结构在前面已经贴出,这里主要介绍该类的设计思路。 构造函数的职责,即利用已经建立的套接字,初始化类的相关结构,包括套接字、地址、接收发送线程、连接信息状态字、收发数据等。析构函数则负责把收发缓冲区的资源释放。 对于Sever端,每建立一个与新客户机的连接,得到了连接的socket信息。那么就利用这个socket信息创建一个CClient对象。这个对象承担的职责就是描述这个连接。同时,还将这个连接中流通的收发数据封装在了这

文档评论(0)

东山书苑 + 关注
实名认证
内容提供者

业务以学生学习成长为中心,为外语培训、中小学基础教育、学前教育,提供各种学习资料支持服务。

1亿VIP精品文档

相关文档