您的位置 首页 作文网

计算机网络课程设计实现聊天室报告 嘉乐代刷_万福卡盟

该篇文章只是介绍性内容,完整的资源(包括代码)在主页资源→互联网多人聊天系统中

目 录 中文摘要

主要内容:本系统主要分为两部分:服务器端和客户端。服务器端用于提供一个网络端口,等待客户端发出请求,登录到此服务端,然后进行网络通讯和消息的转发;客户端可通过服务器端的IP地址发送连接请求,然后登陆聊天室。先启动服务器端聊天程序,这是聊天服务器需要指定一个端口号,客户端则根据这个端口号以及服务器的IP地址与服务器进行通信,服务器启动后将在这个指定的端口号中等待客户的连接。通过分析发现,该程序完全可以通过Visual C++中MFC完成[1]。其中网络上查询了一些函数调用以及套接字建立的方法。

效果: 实现了简单的多人聊天

不足:还不能实现从群聊中选择一个人进行私聊,不能发送图片或者文件。

关键词: vc; mfc; c/s模式

第1章 系统开发基础技术 1.1项目内容介绍

本文讨论一种基于Socket的网络聊天的设计与具体实现方法。基于Socket的网络聊天软件可以为网络内用户提供一种快捷,良好,方便的通信方式,网络内的全部机子可以通过一个服务器建立的聊天室进行聊天。对于它的实现,用户不需对原有的网络硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地提高网络的使用效率,可以很好地解决用户内部网络的即时通信需求。运用MFC技术,基于vc++平台进行开发。

1.2相关技术MFC

MFC,微软基础类,实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是Windows下开发人员使用的专业C++SDK(SDK,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC同VC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的。MFC作为与VC++血肉相连的部分MFC同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的。

1.3相关技术Winsock

Windows Sockets规范定义了一套Micosoft Windows下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。Windows Sockets规范定义并记录了如何使用API与Internet协议族(IPS计算机网络课程设计实现聊天室报告,通常我们指的是TCP/IP)连接,尤其要指出的是所有的Windows Sockets实现都支持流套接口和数据报套接口.应用程序调用Windows Sockets的API实现相互之间的通讯[2]。

1.4相关技术c/s

C/S模式是指一个服务器同时为多个客户端服务。并发性是C/S模式的的基础,正是由于并发性的支持,多个客户端能够获得同一种服务,而不需要向每个用户端建立连接后在发送消息。在C/S模式中计算机网络课程设计实现聊天室报告,当请求到达服务器时,服务器将它交给一个控制线程,它能与已有的线程并发的执行,这样就大大减轻了服务端的任务

第2章 系统分析 2.1系统需求分析

实现多人聊天室通信功能,采取服务器先接受信息,再对客户端进行转发。

C/S模式图如下图所示

2.2 系统概要设计

系统构架图如下

通过聊天系统的分析并结合现实情况,可以设计出整个系统的总体流程结构,如图所示:

服务器与客户端是通过套接字来进行通信的。

在基于TCP的网络通信程序中,首先服务器端通过socket()函数创建套接字,然后通过bind()函数来命名套接字,调用listen()函数开启服务器端的监听。接着执行accept()函数来接收客户的连接,服务器阻塞等待客户连接请求,直到有客户请求连接。

客户端创建套接字,接着通过connect()函数请求连接服务器,连接成功后,就可以与服务器进行通信了。

服务器与客户机通过send()各recv()调用来进行信息的发送和接收。只有当有信息可接收时,recv()才返回,否则将阻塞。

通信完后,服务器和客户机各自通过closesocket()函数来关闭套接字。

2.3 系统详细设计

m_server = socket(AF_INET,SOCK_STREAM,0);

利用listen(m_server,50)开始监听客户链接请求,然后确定监视服务器是否 被打开。响应客户发送聊天文字到服务器。

void CServerDlg::OnOK() //监听绑定

首先链接到服务器,创建面向连接的Socket,使用TCP/IP协议[8],如下:

sockaddr_in serveraddr;

UpdateData(TRUE);

serveraddr.sin_family = AF_INET;

serveraddr.sin_port = htons(m_port);

serveraddr.sin_addr.S_un.S_addr = inet_addr(m_IP);

创建连接:

connect(m_client,(sockaddr*)&serveraddr,sizeof(serveraddr)) //请求连接

MessageBox(“连接成功!”,NULL,MB_OK);

客户端发送数据:

void CClientDlg::OnButton1() //发送

改写对话框的PreTranslateMessage方法,解获对话框消息,接受数据

BOOL CClientDlg::PreTranslateMessage(MSG* pMsg)

接收数据:

void CClientDlg::ReceiveData()

第3章 系统开发 3.1系统开发环境配置

1) 动态链接库ws2_32.dll

ws2_32.dll是Windows Sockets应用程序接口, 用于支持Internet和网络应用程序。程序运行时会自动调用ws2_32.dll文件,ws2_32.dll是个动态链接库文件位于系统文件夹中。Windows在查找动态链接库文件时会先在应用程序当前目录搜索,如果没有找到然后才会搜索Windows所在目录;

(2) winpcap 驱动

Winpcap是windows平台下一个免费,公共的网络访问系统。是为win32应用程序提供访问网络底层的能力。其主要功能在于独立于主机协议(如TCP/IP)而发送和接收原始数据包[6]。

(3)开发工具:Visual C++6.0

3.2 系统开发

服务器端

首先要开启服务器功能,编写相关代码,然后指定开启服务器功能的端口,在程序视图显示提示信息的函数,相关视图可自行创建。创建服务器端Socket,类型为SOCK_STREAM,面向连接的通信,设置相关命令与选定的端口绑定。WSAAsyncSelect将网络中的事件关联到窗口的消息函数中。实现代码如下:

m_server = socket(AF_INET,SOCK_STREAM,0);

WSAAsyncSelect(m_server,m_hWnd,20000,FD_WRITE|FD_READ|FD_ACCEPT);

利用listen(m_server,50)开始监听客户链接请求,然后确定监视服务器是否 被打开。响应客户发送聊天文字到服务器。

void CServerDlg::OnOK() //监听绑定

sockaddr_in serveraddr;

serveraddr.sin_family = AF_INET;

m_IP.GetWindowText(m_serverIP);

serveraddr.sin_addr.S_un.S_addr = inet_addr(m_serverIP);

UpdateData(TRUE);

serveraddr.sin_port = htons(m_port);

if (bind(m_server,(sockaddr*)&serveraddr,sizeof(serveraddr)))

MessageBox(“绑定地址失败.”);

return;

listen(m_server,50);

设置MAXNUM是服务器可响应连接的最大数目,用可控缓冲接收函数recv()来接收字符[7],然后服务器端接受显示文字,编写的函数,向所有连接的客户广播这个客户的聊天文字。部分代码如下:

sockaddr_in serveraddr;

char buffer[1024];

int len =sizeof(serveraddr);

//接收客户端的数据

num= recv(m_Clients[p],buffer,1024,0);

聊天室程序设计报告_计算机网络课程设计实现聊天室报告_计算机网络聊天室课程设计

buffer[num]= 0;

if (num==-1) //接受客户端的连接

m_Clients[m_CurClient] = accept(m_server,(struct sockaddr*)&serveraddr,&len);

m_CurClient+=1;

//将接收的数据发送给客户端

for (int j = 0;j< m_CurClient;j++)

if (j != curlink)

send(m_Clients[j],buffer,num,0);

客户端

首先链接到服务器,创建面向连接的Socket,使用TCP/IP协议[8],如下:

sockaddr_in serveraddr;

UpdateData(TRUE);

serveraddr.sin_family = AF_INET;

serveraddr.sin_port = htons(m_port);

serveraddr.sin_addr.S_un.S_addr = inet_addr(m_IP);

创建连接:

connect(m_client,(sockaddr*)&serveraddr,sizeof(serveraddr)) //请求连接

MessageBox(“连接成功!”,NULL,MB_OK);

客户端发送数据:

void CClientDlg::OnButton1() //发送

CString str,name,info ;

m_name.GetWindowText(name);

m_info.GetWindowText(str);

if (!name.IsEmpty()&&!str.IsEmpty())

info.Format(“%s说: %s”,name,str);

//开始发送数据

int i = send(m_client,info.GetBuffer(0),info.GetLength(),0);

m_list.AddString(info);

m_info.SetWindowText(“”);

//改写对话框的PreTranslateMessage方法,解获对话框消息,接受数据

BOOL CClientDlg::PreTranslateMessage(MSG* pMsg)

if (pMsg->message==1000)

ReceiveData();

return TRUE;

else

return CDialog::PreTranslateMessage(pMsg);

接收数据:

void CClientDlg::ReceiveData()

计算机网络聊天室课程设计_计算机网络课程设计实现聊天室报告_聊天室程序设计报告

char buffer[1024];

//接收服务器端传来的数据,

int num = recv(m_client,buffer,1024,0);

buffer[num] = 0;

//将接收的数据添加到列表框中

m_list.AddString(buffer);

程序流程图如下图

第4章 系统测试 4.1测试环境

VS 2017

4.2功能测试

运行服务端出现如下界面

设置服务器端口,点击设置。

运行客户端出现如下图,输入IP地址,端口号以及昵称

如果IP地址和端口号正确,如下图

如果不正确,则有

现在同时登陆多个客户端进行聊天,即打开多个客户端

4.3测试结果分析

实现了简单的多人聊天系统,但是客户端下线时没有在公屏提醒,实现了主要的功能,还有些许瑕疵没有解决。

第5章开发过程的问题及解决方案

最难的是系统详细设计和编码阶段,在这个阶段,由于自己动手不足和对开发工具的陌生,最主要的是,对知识还不是熟练地掌握,系统遇到了很多大大小小的问题,如如何利用多线程,所以我的聊天程序是一个很简单的客户端与客户端的聊天程序。

第6章 结 论

内容:简单的基于VC的聊天系统基本完成,系统基本功能基本实现,测试运行也基本正常。该系统基本上完成了客户端与服务器的连接,实现了客户端与客户端的聊天并显示相应记录。

当然这个系统还存在许多有待完善的地方:功能相对较少,有待于添加,比方说像客户端与服务器相互发送信息,文件传输等功能,用户登录加密等。

参考文献

[1] 侯俊杰.《深入浅出MFC第2版[M]》.华中科技大学出版社.2002年

[2] 杨祥金、杨丹、李永新.《Windows程序设计教程[M]》.清华大学出版社.2007

[3] 王金保.《基于Winsock的Chat设计[J]》.辽宁石油化工大学学报.2004年 第04期

[4]张越.Visual C++网络程序设计实例详解[M].北京:人民邮电出版社,2006.

[5]张正秋.WINDOWS程序捆绑核心编程[M].北京:清华大学出版社,2007.

[6] 赵辉、叶子青.《Visual C++系统开发实例精粹[M]》.人民邮电出版社.2006

[7] 王振江. 《VC++环境下WinSock编程及实例分析[J]》. 四川电力技术.2003年第06期

[8] 马亲民,熊文辉.《利用MFC Socket类实现TCP/IP通信[J]》.通信技术.2002年第01期。

本文来自网络,不代表立场,转载请注明出处:http://www.looktm.com.cn/zuowen/77540.html

发表回复

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部