- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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对象。这个对象承担的职责就是描述这个连接。同时,还将这个连接中流通的收发数据封装在了这
您可能关注的文档
最近下载
- 7.1 我国法治建设的历程 课件-高中政治统编版必修三政治与法治.pptx
- 汽車售后服务管理.doc VIP
- 2020-2021学年六年级数学下册试题 - 期中测试卷 北师大版(含答案).docx VIP
- 某锂电池生产废水中水回用工程实例.pdf VIP
- 人教版生物中考复习全4册必背知识点考点提纲精编版(实用,必备!).docx
- 反冲和火箭模型(解析版)-动量守恒的十种模型解读和针对性训练.pdf VIP
- A公司员工绩效考核问题及对策研究.doc VIP
- 职业技能《粮油质量检验员》专业技术知识考试题与答案.pdf VIP
- 生物制药岗位招聘笔试题与参考答案(某大型央企) .pdf VIP
- 路易斯·巴斯德.ppt
文档评论(0)