计算机网络课设_基于TCP协议编程的网络聊天室.docxVIP

计算机网络课设_基于TCP协议编程的网络聊天室.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

PAGE/NUMPAGES

基于TCP协议编程的网络聊天室

设计容:基于TCP协议编程的方式,编写程序模拟网络聊天室的运行过程。

设计要求:

1.采用C/S模式,基于TCP协议编程的方式,使得各个用户通过服务器转发实现聊天的功能。

2.分为两大模块:客户端模块和服务器端模块。

3.客户端模块的主要功能:

1)登陆功能:用户可以注册,然后选择服务器登入聊天室。

2)显示用户:将在线用户显示在列表中。

3)接收信息:能接收其他用户发出的信息。

4)发送信息:能发出用户要发出的信息。

4.服务器端模块的主要功能:

1)检验登陆信息:检查登陆信息是否正确,并向客户端返回登陆信息,如信息正确。就允许用户登陆。

2)显示在线状态:将该用户的状态发给各在线用户。

3)转发聊天信息:将消息转发给所有在线的用户。

5.编程语言不限。

需求分析

此程序主要分为两部分:服务器端和客户端。

服务器端用于提供一个网络端口,等待客户端发出请求,登录到此服务端,然后进行网络通讯和消息的转发;客户端可通过服务器端的IP地址发送连接请求,然后登陆聊天室。在服务器端的成员列表栏中会显示在线的所有人,有人退出聊天室,成员列表会自动除名。整个程序的主体使用了CSocket类的方法,实现了网络通讯聊天。整个程序设计为两个部分:服务器(SpeakerServer)和客户端(SpeakerClient)?。

多人聊天的关键在于要将每个客户端发送过来的消息分发给所有其他客户端,为了解决这个问题,在服务器程序中建立一个套接口链表,用来保存所有与客户端建立了连接的服务端口。

设计原理:服务器通过socket()系统调用创建一个Socket数组后(设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。如果有客户端连接请求,则在数组中选择一个空socket,将客户端地址赋给这个socket,然后登陆成功的客户就可以在服务器上聊天了。

客户端程序相对简单,只要建立一个socket与服务器端连接,成功后通过这个socket来发送和接收就可以了。

服务器端功能:

初始化socket,创建服务器端。

维护一个链表,保存所有用户的IP地址,端口信息。

接受用户传送来的聊天信息,然后向链表中的所用用户转发。

接受用户传送来的连接判断命令,并向用户发出响应命令。

客户端功能:

客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用户输入的聊天信息。当按下“发送”按钮时将信息发送给服务器。

概要设计:

服务器客户端

(设计流程图)

详细设计:

服务器端:

1、启动服务器代码:

//服务器启动时,先创建套接字并绑定端口,再监听此端口。

voidCSpeakerServerDlg::OnBnClickedStart()

{

UINTuPort=GetDlgItemInt(IDC_PORT);

//创建套接字

if(!m_TCPSocketListen.Create(uPort))

{

m_TraceRichEdit.TraceString(TEXT(绑定监听端口失败,请确认该端口没有被其它程序占用),TraceLevel_Warning);

return;

}

//监听套接字

if(!m_TCPSocketListen.Listen())

{

m_TraceRichEdit.TraceString(TEXT(监听失败),TraceLevel_Warning);

return;

}

UINTuMaxConnect=GetDlgItemInt(IDC_MAX);

//设置接口

m_TCPSocketListen.SetTCPSocketService(this);

//更新界面

m_TraceRichEdit.TraceString(TEXT(服务器启动成功),TraceLevel_Normal);

GetDlgItem(IDC_START)-EnableWindow(FALSE);

GetDlgItem(IDC_STOP)-EnableWindow(TRUE);

}

2、监听端口,收到连接请求,接受的代码:

//先检验是否在服务器的最接限制,若在,则获取当前客户的IP地址和端口等信息,插入链表中。

//为什么要限制连接人数?因为TCP连接是相当占资源的,若不限制连接人数,服务器的资源不够分配。

voidCSpeakerServerDlg::OnAccept()

{

//承载能力

if(m_TCPSocketItemMap.size()GetDlgItemInt(IDC_MAX))

{

文档评论(0)

188****1741 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档