计算机网络-聊天室的设计与实现

计算机网络实践

  • 一、实践设计的目的和意义
  • 二、实践设计的内容和要求
  • 三、设计用设备仪器
  • 四、实践设计的相关技术
  • 五、项目设计与实践
    • 1、设计思路
    • 2、模块描述
    • 3、运行结果
  • 六、结束语
  • 源码与详细过程

一、实践设计的目的和意义

在互联网如此发达的今天,即时通信工具已经成为我们如今日常生活中必不可少的一部分。
人们对网络的依赖越来越多,越来越离不开网络,而由此产生的聊天工具也越来越多,类似有QQ、MSN、微信等,网络聊天使网络聊天系统发展的日新月异,由此产生制作了一个简单的聊天功能的网络聊天程序,由此此设计我们还可以更好的学习网络软件的编程知识。
Java语言是当今流行的网络编程语言,它具有面向对象,与平台无关,安全,多线程等特点。使用java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的嵌入式设备进行应用程序的开发。面向对象的开发是当今世界最流行的开发方法,它不仅具有更贴近自然地语义,而且有利于软件的维护和继承。
此次设计的题目为聊天室,可以巩固所学的java 语言基础知识,增进java语言的编辑基本功,拓宽常用类库的应用,使我们通过实践环节与手段,把所学的课程及相关知识加以融会贯通,全面理解网络编程的含义。
聊天室虽然程序简单,但是在设计与实现的过程中能够充分学到基于Socket的网络编程的技术,使我们掌握网络编程的服务的技术,能够充分利用我们学到的java编程语言。

二、实践设计的内容和要求

实现聊天功能Client/Server的面向连接的编程技术。使用多线程进行多个客户端和服务器的连接,实现数据的读取与输入。
实现网络聊天系统的设计与实现,让我们掌握网络编程的服务的技术,更加深刻的了解,掌握这方面的知识

三、设计用设备仪器

操作系统:Window10
开发工具:JDK1.8、Eclipse

四、实践设计的相关技术

总的设计思想是利用java里的套接字Socket和ServerSocket(客户/服务器)来建立进程之间的通信
套接字工作原理:
要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
【所谓服务器监听】是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
【所谓客户端请求】是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。【所谓连接确认】是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

TCP/IP协议参考模型:
TCP/IP实际上一个一起工作的通信家族,为网际数据通信提供通路。为讨论方便可将TCP/IP协议组大体上分为三部分:
1.网络层:包括Internet协议(IP)、网际控制报文协议(ICMP)和地址识别协议(ARP).
2.传输层:传输控制协议(TCP)和用户数据报文协议(UDP)
3.应用层:处于TCP和UDP之上的一组协议专门开发的应用程序。它们包括:TELNET,文件传送协议(FTP),域名服务(DNS)和简单的邮件传送程序(SMTP)等许多协议。
TCP/IP 使用了主干网络,能连接各种主机和LAN的多级分层结构,局部用户能方便的联网,不致影响到整个网络系统。此外这种结构还有利于局部用户控制操作和管理。
TCP/IP 具有两个主要功能。第一是IP在网络之间(有时在个别网络内部)提供路由选择。第二是TCP将TP传递的数据传送到接收主机那的适当的处理部件。

根据传输数据类型的不同,Socket主要分为三类:
①流式Socket(SOCK-STREAM),在这种方式下,两个通讯的应用程序之间要先建立一种虚拟连接,提供可靠的、面向连接的通信流,它使用TCP协议,从而保证了数据传输的正确性和有序性。
②数据报Socket(SOCK-DGRAM),它使用数据报协议UDP,定义了一种无连接服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠、无差错。
③原始Socket,原始套接字允许对底层协议如IP或ICMP直接访问,它功能强大但使用较为不便。主要用于一些协议的开发。

Socket 的通信机制图

五、项目设计与实践

1、设计思路

在服务器端 用一个HashMap 维护所有用户相关的信息,从而能够保证和所有的用户进行通讯。

客户端的动作:
(1)连接(登录):发送userName服务器的对应动作:1)界面显示,2)通知其他用户关于你登录的信息, 3)把其他在线用户的userName通知当前用户 4)开启一个线程专门为当前线程服务
(2)退出(注销):
(3)发送消息

※※发送通讯内容之后,对方如何知道是干什么,通过消息协议来实现:

客户端向服务器发的消息格式设计:
命令关键字 @# 接收方 @# 消息内容 @# 发送方
1)连接:userName ----握手的线程serverSocket专门接收该消息,其它的由服务器新开的与客户进行通讯的socket来接收
2)退出:exit @# 全部 @# null@# userName
3)发送: on @# JList.getSelectedValue() @# tfdMsg.getText() @# tfdUserName.getText()

服务器向客户端发的消息格式设计:
命令关键字 @# 发送方 @# 消息内容
登录:

  1. msg @# server @# 用户[userName]登录了 (给客户端显示用的)
  2. cmdAdd @# server @# userName (给客户端维护在线用户列表用的)
    退出:
  3. msg @# server @# 用户[userName]退出了 (给客户端显示用的)
  4. cmdRed@#server @# userName (给客户端维护在线用户列表用的)
    发送:
    msg @# 消息发送者 @# 消息内容

2、模块描述

(1)用户私聊:用户之间通过共同的服务器进行通信私聊,实现了一对一聊天。
(2)聊天室群聊功能:用户A可以在聊天室中对其余所有人说话
(3)服务器开启与关闭:根据TCPSOCKE管理通信,服务器开启监听用户请求链接,若服务器关闭则用户不能登录。
(4)好友状态实时显示:利用客户端守护线程实时监控好友状态,守护线程每间隔10秒向服务器端发送请求,服务端返回当前在线的用户状态信息给客户端,若当前在线的用户状态信息有变,则客户端根据服务器端的返回信息更新好友状态。
(5) 服务器对客户终端实时监控:只监听在线用户

3、运行结果

1、运行服务端程序,启动服务器
计算机网络-聊天室的设计与实现_第1张图片

2、运行客户端程序,客户端连接服务器
计算机网络-聊天室的设计与实现_第2张图片

3、创建多个客户端,连接服务器进行聊天
计算机网络-聊天室的设计与实现_第3张图片
计算机网络-聊天室的设计与实现_第4张图片

4、退出客户端
计算机网络-聊天室的设计与实现_第5张图片

六、结束语

本次通过设计程序,编写程序,使我对Client/Server结构软件的设计有了新的认识。对网络编程有了进一步的了解。在设计的过程中了解到自己的知识还是比较有限,使得程序还不够完善。回顾此次Java程序的编写。从理论到实践,可以学到很多东西,同时不仅可以巩固以前学的东西,而且学到了很多课本上学不到的东西,通过本次设计,使得自己懂得必须要把理论和实践相结合起来,从理论中得出结论,才能真正掌握这门技术,也提高了自己思考的能力,在设计的过程中,可以解决。真正体会到要将一门知识学到可以自己运用,才是属于自己的,因此我必须加强实践,多练习。本次设计还有很多不足与缺陷,程序中还有很多问题需要完善。比如,服务器要显示客户端加载的个数,用户聊天时的登录界面等一些问题都需要完善。我会不断改进与完善的。

源码与详细过程

你可能感兴趣的:(大作业,java,网络协议)