付关龙1
1 武汉学院信息工程学院
摘要:本聊天系统利用Java中 的socket网络编程和多线程技术实现。主要包括登录连接、服务器管理、客户聊天三大功能。管理员和用户经过登录界面分别进入到服务器端和客户端,客户通过socket连接服务器,服务器通过多线程技术转发信息到其他客户端。文章简要介绍了JSP(Java Server Page)以及JDBC(Java Database Connectivity)两项Java新 技术,设计出了用Java技术实现的聊天室系统的模型和结构.最后给出了本聊天室系统框架设计。
关键字:套接字,模式,即时通信
依托武汉学院大学生创新训练项目,指导老师:李琼
0背景
随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式已经难以满足人们的交流的需求了,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。同时,即时通信系统对现代企业也有着重大意义,它能实现快速人际交流、数据共享,从而提高效率和生产力。实时通信为诸企业开拓了网络应用的新领域。自从它诞生以来,以实时交互、资费低廉等优点,受到广大个人用户的喜爱,已经成为网络生活中不可或缺的一部分。越来越多的企业已开始认识到即时通信工具能够带来极高的生产力,借助它的应用,来提高业务协同性及反馈的敏感度和快捷度。因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。因此出现了QQ、UC 等聊天工具,然而QQ、UC 等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯的专用工具。目前,用于实现单一的即时通讯的软件实在太少,为此,我们决定开发一个专用于实现多台计算机之间即时通讯的软件,以方便多台计算机之间信息的快速交流。本系统基于C/S 模式实现,采用Java 语言编写。所有用户都通过服务器端中转消息,这也是现有大多数聊天系统所采用的模式。本系统真正地实现了多点聊天的功能,可以在多点间快速传递信息。同时,它体积小,功能单一,界面简洁美观,容易上手,只要简单阅读服务器端和客户端的帮助文档即可完全掌握它的使用方法。
2研究解决的问题
如何在网络通信方面使用Socket协议,采用C/S形式的两层结构,发挥C/S结构的优点。如何在客户端处理后再提交给服务器信息。服务器在接到客户端的信息后如何处理?优化程序代码,使得聊天的用户体验更加完美,本设计拟采用的研究手段,从功能上设计几个大模块。
3服务器端、客户端功能描述:
3.1启动服务器端:点击“开启”按钮,启动服务;端口服务:输入服务器的某个端口号,开启服务器的这个端口;
1. 显示在线用户信息:在右边的用户列表显示所有在线的用户信息;
2. 显示用户聊天信息:在聊天信息区域内显示用户所发的所有信息;
3. 该系统服务器端能进行数据库管理(包括用户自己的注册信息,用户的聊天信息,用户的好友信息);
4. 该系统服务器端实现信息管理功能(包括信息接受,信息发送,信息删除以及信息存储)
服务端关闭:点击“关闭’按钮,关闭服务。
3.2启动客户端:运行客户端程序,启动客户端。
1. 该系统客户端用户在使用之前需要先注册,注册之后需登陆才能使用
2. 用户登录:填入用户名,点击“登录”按钮,连接相应服务器;
3. 显示用户:用户列表中可以看到自己的好友用户并区分在线和离线状态;
4. 该系统客户端用户能够进行信息的发送和接受;
客户端关闭:关闭客户端图形用户界面,关闭客户端。
4相关技术介绍
经过对系统需求的认真分析,综合各种计算机高级语言的特性和适应范围,最终决定选择纯面向对象的Java 语言来完成我的毕业设计,Java 是Sun Microsystem 公司的James Gosling 开发的编程语言。Sun 公司的口号就是"网络就是计算机",Java 能使所有东西从桌面计算平稳的转变为基于网络的计算,它是专门为此而建立的,并显然是为了完成这个任务而来的。使用Java,我们可以相对轻松的编写一个有条理的网络程序。下面就技术可行性方面,对Java 语言作一简要介绍。Java 是一种简单的、面向对象的、健壮的、安全的、解释的、与平台无关的、多线程、动态的计算机语言。Java 的开发环境有不同的版本,Sun 公司相继的推出了J2ME、J2SE、J2EE 三大平台,尤其是J2SE 是Java 2 标准平台,广泛用于工作站、PC 机,被称为“互联网上的世界语”。这些为我们开发系统提供了强大的平台支持。而且Java 在互联网方面具有得天独厚的优势,也是最吸引我们的地方之一。
4.1通信原理-嵌套字通信
套接字(Socket)是网络通信的基本操作单元,又称作端口,通常用来实现客户方和服务方的连接。网络上的两个程序通过一个双向的通信连接实现数据的交换,在实现双向通信前链路的每一端都建立一个Socket,通过对Socket 的读/写操作实现网络的通信功能。套接字是网络通信的一个标准,它就像房中的电源插座,无论是电灯还是电脑等电器,它们只要使用220V 50HZ 的交流电压,插在电源插座上能正常工作。
套接字分为以下3 种类型:
(1) 流套接字
这是最常用的套接字类型,TCP/IP 协议簇中的TCP 协议使用此类接口,它提供面向连接的(建立虚电路)、无差错的、发送先后顺序一致的、包长度不限和非重复的网络信包传输。
(2) 数据报套接字
TCP/IP 协议簇中的UDP 协议使用此类接口,它是无连接的服务,以独立的信包进行网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。
通信原理-嵌套字通信
(3) 原始数据报套接字
提供对网络下层通信协议的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议和提取协议较隐蔽的功能。所有Socket 通信程序的基本结构都是一样的,主要有创建Socket、打开连接到Socket 的输入流和输出流、按照一定的协议对Socket 进行读写操作、关闭Socket 这四个步骤,通过这四个步骤可以完成一般的Socket 通信。为了完成Socket 通信,java.net包中提供了Socket 和ServerSocket 这两个类,它们分别用来表示双向连接的客户端和服务端
(4)通信原理-客户端嵌套字通信
客户端/服务器是一种网络服务模式。在该模式中,客户机和服务器之间需要定义一套通信协议,并创建一个Socket 类,利用这个类来建立一条可靠的链接;然后,客户端/服务器再在这条连接上可靠地传输数据。客户端发出请求,服务器监听来自客户机的请求,并为客户端提供响应服务。利用Socket 类,我们可以轻松地实现网络客户端程序的编写,Socket 4.2类的一些常用的方法汇总如下:
getLocalAddress() 读取套接字对象的本地地址
getLocalPort() 读取套接字所使用的本地端口号
getInputStream() 得到一个输入流
getOutputStream() 得到一个输出流
通常情况下,客户端只要能够顺序处理服务器程序的响应就可以了,因此客户端程序通常不使用多线程。
4.3通信原理-服务端嵌套字通信
实现套接字的服务端,需要使用ServerSocket 类。ServerSocket 类是服务器程序的运行基础,它允许程序绑定一个端口号来监听客户端的请求,一旦产生客户端请求,它将接受这一请求,同时产生一个完整的Socket 连接对象。服务器绑定的端口必须公开,以便让客户端程序知道如何连接这个服务器。同时,作为服务器,它必须能够接收多个客户的请求,这就需要为服务器设置一个请求队列,如果服务器不能马上响应客户端的请求,要将这个请求放进请求队列中,等服务器将当前的请求处理完,会自动到请求队列中按照先后顺序取出请求进行处理。服务器的资源是有限的,这就导致它的最大连接数是有限的,通过ServerSocket 的构造函数可以指定这个最大连接数。如果不明徐州工程学院毕业设计(论文)确指定这个连接数,默认最大连接数为50,也就是说,客户端的请求队列最大可以容纳50 个请求,当超过这个最大连接数时,用户的请求将不再会被响应。利用SocketServer 也提供了一些方法,它们主要有:
通信原理-服务端嵌套字通信
accept() 返回一个“已连接”的Socket 对象
getInetAddress() 得到该服务器的IP 地址
getLocalPort() 得到服务器所侦听的端口号
setSoTimeout() 设置服务器超时时间
getSoTimeout() 得到服务器超时时间
由于存在单个服务程序与多个客户程序通信的可能,所以服务程序要响应客户程序不应该花很多时间,否则客户程序在得到服务前有可能花很多时间来等待通信的建立,然而服务器程序和客户程序的会话可能很长,因此,为加快对客户程序连接请求的响应,典型的方法是服务器主机运行一个后台线程,这个后台线程处理服务器和客户端程序的通信。这一点和客户端的程序设计是不同的。
5系统功能实现
聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的消息,客户端需登录到服务器才可以实现正常聊天功能。
5.1服务器端的主要功能如下
在特定的端口上进行侦听,等待客户段连接,用户可以配制服务器的侦听端口,默认端口为888,向已经连接到服务端的用户发送系统消息,统计在线人数,当停止服务时,断开所有用户连接。
5.2客户端的主要功能如下
连接到已经开启聊天服务的服务端,用户可以配制要连接服务器端的IP 地址与端口号
用户可以配制连接后显示的用户名,当服务器端开启后,用户可以随时登陆和取消,用户可以向所有人或者某一个人发送消息。
图4 端口设置界面设计
6总结
目前安卓手机的市场分额已经达到94%,智能手机已经成为人们日常生活中不可缺少的一部分.本文深入研究了Android系统的网络通信,并应用socket通信方式设计了一个聊天系统.该系统采用的语言是Java语言,开发工具是Eclipse.通过模拟器测试,系统可以运行并实现通信功能. 研究的网络聊天系统主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面,通过套接字(socket)来连接发送消息,同时通过直接继承Thread类来建立多线程,使得更多的人参与聊天,从而拉近人与人之间的距离,实现消息最大资源共享。真正实现沟通零距离。以后客户端拉(Client-Pull)方式和服务器推(Server-Push)方式两种类型Web聊天室的优劣,并给出了推方式Web聊天室的一种高效的实现方法,在Windows平台上用ISAPI技术实现了一个采用服务器推方式的高性能Web聊天室系统,并探讨了多用户并发访问时的多线程同步安全性设计问题.
参考文献:
[1]基于WebRTC技术的音视频聊天室系统的设计与实现,霍立娟,南京邮电大学,2016-11-18
[2]基于AJAX技术的背单词网站交互聊天室设计,金红军,才智,2013-10-15
[3]一种基于PHP技术的聊天室系统的设计与实现,蒋艳艳,计算机光盘软件与应用,2013-03-01.
[4]基于Java多线程技术的聊天系统设计与开发,涂风涛,科技广场,2012-09-30
付关龙(2000-1-5),湖北荆州人,武汉学院信息工程学院软件工程专业,本科。研究方向:云计算、大数据分析、网络安全。