- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络程序设计报
Windows 网络程序设计报告
-------聊天工具的设计
专业: 通信092
姓名:
一、设计需求
在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《Windows网络程序设计》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。接下来的课程设计就是针对一个简单的网络聊天程序,利用C++为开发工具,实现基本的通讯功能。
二、实现功能(1)登录功能。(2)客户可以通过服务器转发,实现一对一和多对多聊天。(3)实现呼叫功能。(4)客户端程序应该可以实时显示目前其它用户的状态(5)应该具有易用、美观的图形界面。
(4)使用Socket编程实现聊天工具客户端和服务端的设计。四、设计方案
整个程序设计为两个部分:服务器 (ChatRoomServer)和客户端 (ChatRoom),该程序分输入IP地址和端口号后,能够连接到服务器,然后进行多人聊天。文件包括课程设计报告和程序代码。USERLIST)中的套接口缓冲区,然后向每个服务端口发送WRITE消息,使每个服务端口将Message发送给对应的客户端。这样,所有客户端就都获得了Message消息,实现了多人聊天功能。
BOOL CClientSocketList::Sends(char *buff,int n)
{CClientSocket *curr=Head;
while (curr)
{curr-Send(buff,n);
curr=curr-Next;}
return true;}
USERLIST表时多人聊天程序的核心,它是一个动态变化的链表,为空表示没有客户端建立了连接,不为空时每个元素就代表有一个客户端与服务器建立了连接。
(一)客户端的设计
?1.首先利用对话框建立聊天程序的界面
最上面是一个接受数据的编辑框,下面分别是一个Ip地址控件和发送数据的编辑框,左下角是触发发送数据的按钮。
2.加载套接字库,在MFC中用AfxSocketInit()加载套接字库。需要注意的是这个函数要在程序的初始化函数中调用,即在Appliacation的InitInstance()中调用AfxSocketInit();
3.初始化套接字。在对话框中添加一个成员函数SockInit(),用来初始化套接字,然后在对话框初始化函数OnInitDlg()中调用SockInit()。Tip:因为聊天程序既包含接收端又包含发送端,所以需要绑定Ip和端口。
4.创建多线程。接受数据时,如没有数据到来,则会阻塞,导致程序暂停运行,所以把接受数据工作放到单独的线程中。在OnInitDlg()中创建多线程。Tip:因为需要给线程传递一个通信的套接字和响应消息的窗口句柄,所以需要额外定义一个结构体,用来存储这两个参数。
struct RECVPARAM{?HWND hWnd;?????????? //接收数据窗体的句柄?SOCKET sock;???????? //接收数据的套接字};
5.实现线程过程函数。Tip:如果要求不能用全局函数的话,那线程过程函数就要定义为static(它属于类本身).在线程过程函数中循环接受消息,利用::PostMessgae()函数给接受数据编辑框发送消息,以实现显示信息的功能
6.自定义消息的实现。因为在PostMessage中是自定义的消息(WM_RECVDATA),所以需要完成消息映射。(1)定义消息值#define WM_RECVDATA WM_USER+1 (2)声明消息处理函数:afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam);(3)完成消息映射:ON_MESSAGE(WM_RECVDATA,OnRecvData)
7.实现OnRecvData()函数。显示接收到的信息
8.实现OnButtonSend()函数。发送消息
?
编写一个基于MFC对话框的聊天程序:1.新建一个基于MFC项目工程Chat2.加载套接字库,有下面两种方法,在这里选择第二种方法,因为更方便。
方法一、使用WSAStartup()加载套接字库参考MSDN中的范例代码,拷贝到自己的程序中修改即可。* 注意不再使用套接字后调用WSACleanup()。
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequeste
文档评论(0)