网络程序设计报告.doc

网络程序设计报告.doc

ID:58831348

大小:346.00 KB

页数:10页

时间:2020-09-24

网络程序设计报告.doc_第1页
网络程序设计报告.doc_第2页
网络程序设计报告.doc_第3页
网络程序设计报告.doc_第4页
网络程序设计报告.doc_第5页
资源描述:

《网络程序设计报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Windows网络程序设计报告-------聊天工具的设计专业:通信092姓名:一、设计需求在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《Windows网络程序设计》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。接下来的课程设计就是针对一个简单的网络聊天程序,利用C++为开发工具,实现基本的通讯功能。二、实现功能(1)登录功能。(2)客户可以通过服务器转发,实现一

2、对一和多对多聊天。(3)实现呼叫功能。(4)客户端程序应该可以实时显示目前其它用户的状态。(5)应该具有易用、美观的图形界面。三、功能分析(1)多人会话。此程序分为服务器端和客户端,当客户端要进入聊天室的时候,就必须通过网络连接到服务端,以实现和其它客户端的通讯功能。其中最简单的一种通讯方式就是多人会话,运用多线程同时对多个用户的信息进行监听,服务器通过转发消息,让所有人都可以得到消息,实现多人会话。(2)一对一会话。此程序的服务器端除了能够提供多人会话的功能外,还提供了私人聊天功能,可以实现一对一的聊天。就是在消息转发的时候,私聊的消息只发给私聊的

3、对象,而其他人看不到此消息,但是此消息会通过服务器端转发,然后再到达目的客户端。(3)服务器登陆。服务器端开启之后处于监听状态,多线程工作,接受每一个用户的连接请求。而客户端只需输入服务器端的IP地址即可,端口在服务器端自动生成。(4)使用Socket编程实现聊天工具客户端和服务端的设计。四、设计方案整个程序设计为两个部分:服务器(ChatRoomServer)和客户端(ChatRoom),该程序分输入IP地址和端口号后,能够连接到服务器,然后进行多人聊天。文件包括课程设计报告和程序代码。多人聊天的关键在于要将每个客户端发送过来的消息分发给所有其他客

4、户端,为了解决这个问题,在服务器程序中建立一个套接口链表,用来保存所有与客户端建立了连接的服务端口。下面描述了多人聊天的实现原理:当客户端ClientN向对应的服务端口N发送了消息Message,服务端口N将Message复制给所有套接口列表(USERLIST)中的套接口缓冲区,然后向每个服务端口发送WRITE消息,使每个服务端口将Message发送给对应的客户端。这样,所有客户端就都获得了Message消息,实现了多人聊天功能。BOOLCClientSocketList::Sends(char*buff,intn){CClientSocket*cu

5、rr=Head;while(curr){curr->Send(buff,n);curr=curr->Next;}returntrue;}USERLIST表时多人聊天程序的核心,它是一个动态变化的链表,为空表示没有客户端建立了连接,不为空时每个元素就代表有一个客户端与服务器建立了连接。(一)客户端的设计 1.首先利用对话框建立聊天程序的界面,以下是客户端的界面:最上面是一个接受数据的编辑框,下面分别是一个Ip地址控件和发送数据的编辑框,左下角是触发发送数据的按钮。2.加载套接字库,在MFC中用AfxSocketInit()加载套接字库。需要注意的是这个

6、函数要在程序的初始化函数中调用,即在Appliacation的InitInstance()中调用AfxSocketInit();3.初始化套接字。在对话框中添加一个成员函数SockInit(),用来初始化套接字,然后在对话框初始化函数OnInitDlg()中调用SockInit()。Tip:因为聊天程序既包含接收端又包含发送端,所以需要绑定Ip和端口。4.创建多线程。接受数据时,如没有数据到来,则会阻塞,导致程序暂停运行,所以把接受数据工作放到单独的线程中。在OnInitDlg()中创建多线程。Tip:因为需要给线程传递一个通信的套接字和响应消息的窗

7、口句柄,所以需要额外定义一个结构体,用来存储这两个参数。structRECVPARAM{ HWNDhWnd;          //接收数据窗体的句柄 SOCKETsock;        //接收数据的套接字};5.实现线程过程函数。Tip:如果要求不能用全局函数的话,那线程过程函数就要定义为static(它属于类本身).在线程过程函数中循环接受消息,利用::PostMessgae()函数给接受数据编辑框发送消息,以实现显示信息的功能6.自定义消息的实现。因为在PostMessage中是自定义的消息(WM_RECVDATA),所以需要完成消息映射。

8、(1)定义消息值#defineWM_RECVDATAWM_USER+1(2)声明消息处理函数:afx_msg

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。