聊天室程序的设计及实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五聊天室程序的设计及实现
一、实验目的
在实验四的基础上,进一步增加聊天系统的功能,进一步理解MFC的Socket类同Socket API之间的区别以及MFC的两种类之间的联系与区别。掌握聊天系统的设计模式与实现以及CAsynSocket,进一步加强对多线程的理解。
二、实验内容
1.设计实现一个基于客户机/服务器模式的聊天系统;
2.服务器能支持多个客户端;
3.客户端可以选择私聊和屏蔽掉其他用户的信息。
三、实验环境
Windows操作系统、VC++6.0
四、实验指导
1.实验方法步骤
(1)启动Visual C++6.0,创建一个控制台项目工程chat。在此项目工程中添加Client 和Server两个项目。
(2)设计服务器端界面并添加相应代码。要求支持多线程。
(3)设计客户端并添加相应代码。
(4)分别打开服务器和客户端进行验证。
2.CAsyncSocket
(1)套接字的初始化与创建
①初始化
CAsyncSocket()
构造了一个空的套接字,构造后必须调用Create函数,才能真正创建一个Socket句柄
②创建
BOOL Create(UINT nSocketPort=0,int nSocketType=SOCK_STREAM,long lEvent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE|,LPCTSTR lpszSocketAddress=NULL);
(2)套接字的连接操作
①套接字的绑定
BOOL Bind(UINT nSocketPort,LPCTSTR lpszSocketAddress=NULL);
BOOL Bind(const SOCKADDR* lpSockAddr,,int nSockAddrLen);
②对连接的侦听
BOOL Listen(int nConnectionBacklog=5);
③建立连接:
BOOL Connect(LPCTSTR lpszHostAddress,UINT nHostPort);
BOOL Connect(const SOCKADDR* lpSockAddr,int nSockAddrLen);
④接收客户端的连接请求
Virtual BOOL Accept(CAsyncSocket& rConnectedSocket,SOCKADDR* lpSockAddr=NULL,int* lpSockAddrLen=NULL);
(3)发送与接收数据
①面向连接的数据发送与接收
virtual int Send(const void* lpBuf,int nBufLen,int nFlags=0);
virtual int Receive(void * lpBuf,nBuffLen,int nFlags=0);
②无连接的数据发送与接收
发送:
int SendTo(const void* lpBuf,int nBuffLen,UINT nHostPort,LPSTR lpszHostAddress=NULL,int nFlags=0);
int SendTo(const void* lpBuf,int nBuffLen,const SOCKADDR* lpSockAddr,int nSockAddrLen,int nFlags=0);
接收:
int ReceiveFrom(const void* lpBuf,int nBuffLen,UINT CString&rSocketAddress,UINT& rSocketAddress,int nFlags=0);
int SendTo(const void* lpBuf,int nBuffLen,const SOCKADDR* lpSockAddr,int nSockAddrLen,int nFlags=0);
(4)套接字的关闭
①禁止数据的发送与接收
BOOL ShunDown(int nHow=sends);
②关闭套接字
Virtual void Close();
(5)CAsyncSocket的基本事件和重载函数
五、实验报告
1.实验名称
2.实验目的
3.实验内容
4.测试数据和预期结果(必要时应准备多组数据)
5.算法分析和流程图
6.源程序(应加适当的注释,可读性好)
7.小结(出错及解决方法,上机调试的结果和体会)