聊天程序java.docx

上传人:b****8 文档编号:27585070 上传时间:2023-07-03 格式:DOCX 页数:28 大小:169.90KB
下载 相关 举报
聊天程序java.docx_第1页
第1页 / 共28页
聊天程序java.docx_第2页
第2页 / 共28页
聊天程序java.docx_第3页
第3页 / 共28页
聊天程序java.docx_第4页
第4页 / 共28页
聊天程序java.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

聊天程序java.docx

《聊天程序java.docx》由会员分享,可在线阅读,更多相关《聊天程序java.docx(28页珍藏版)》请在冰豆网上搜索。

聊天程序java.docx

聊天程序java

目录

前言-1-

工程概况-1-

正文-1-

2.1课程任务及要求-1-

2.2选题意义-2-

2.3程序需求分析-2-

2.3.1可行性分析-2-

2.3.2服务器端-2-

2.3.3客户端-3-

2.4算法设计-3-

2.4.1UML图如下:

-3-

2.4.2C/S模式套接字的连接-4-

2.4.3文字聊天的实现-4-

2.5程序设计与实现-5-

2.5.1建立连接-5-

2.5.2断开连接-5-

2.5.3C/S模式套接字的连接-6-

2.6程序测试与分析-8-

2.6.1启动服务器-8-

2.6.2启动客户端-8-

2.6.3成功启动客户端-8-

2.6.4聊天过程-9-

2.6.5断开连接-9-

2.7课程设计小结-10-

参考文献-10-

课程设计总结-11-

致谢-12-

附录-13-

前言

《JAVA程序设计教程》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。

其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称。

Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

工程概况

一般来说,聊天工具大多数由客户端和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Socket类来链接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点的,而Java提供的多线程功能用多线程可完成多点的聊天。

本系统建立在JAVA平台上,系统的设计使用了面向对象技术和面向对象的设计原则。

使用JAVA语言编写,开发工具采用Eclipse。

服务器设计与实现过程中,采用了多线程技术,可以在单个程序中同时运用多个不同的线程,执行不同的任务。

大大增强了程序对服务器资源的利用,

 

正文

2.1课程任务及要求

课程设计可选用Eclipse等作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。

建议采用UML建模技术进行系统的分析设计,在Visio中画出系统用例图和类图,并将UML图复制到设计报告中。

通过这次设计,要求掌握以下内容:

1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用

2)类、包、接口的定义与使用

3)常用工具类与算法的实现(数组、向量、字符串、链表)

4)Java常用标准GUI组件及其事件处理

5)Java的异常处理机制

6)Java的数据库连接技术

7)Java的多线程技术

8)Java的网络编程

课程设计选题:

局域网聊天程序的设计与实现

开发工具:

Eclipse

2.2选题意义

局域网聊天软件,除了能加强网络之间的信息沟通外,最主要的是可以将网站信息与聊天用户紧密联系在一起。

通过网站信息向聊天用户群及时群发送,可以迅速吸引聊天用户群对网站的关注,从而加强网站的访问率与回头率。

局域网聊天软件利用的是互联网线路,通过文字、语音、视频、文件的信息交流与互动,有效节省了沟通双方的时间与经济成本;局域网聊天软件不但成为人们的沟通工具,还成为了人们利用其进行电子商务、工作、学习等交流的平台,将日常办公的传统沟通方式替换,有效的减少办公费用的同时,较之更有效率百分之一。

2.3程序需求分析

2.3.1可行性分析

经济可行性:

由于本系统的主要背景是课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以不用考虑到经济问题。

技术可行性:

本系统使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。

运行可行性:

本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。

综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的。

2.3.2服务器端

服务器端主要是为各个客户端建立相互的联系。

在服务器端建立起来后,客户端可以通过搜寻服务器端的IP地址和服务器端的端口地址和服务器建立联系。

在服务器启动的过程中,服务器会在该主机上监听一个网络端口专门为该程序服务,不断监听是否有客户端通过这个端口请求与服务器建立联系。

在建立联系的过程中,需要客户端输入自己的昵称,服务器端会自动检测是否出现客户端重名的情况;然后在客户端输入服务器端的IP地址和该地址的主机端口。

各个客户端在齐界面中输入聊天内容,通过服务器的转发,其他各个客户端都可以收到该客户端的信息;当客户端关闭时,服务器端会提示客户端退出。

在服务器端要实现的功能:

1)建立专用的网络端口;2)不断的监听建立的端口;3)与客户端建立联系;4)与客户端建立输入输出流管道;5)可以与客户端互相发送信息;6)处理用户注册;7)处理用户退出;

2.3.3客户端

客户端是为每一个用户建立一个聊天的界面,单独的客户端是无法运行的,,必须与服务器端建立联系,客户端才能正常使用。

在与服务器端建立联系的时候,需要输入客户端的昵称(用于区别各个用户),服务器端的IP地址,和该地址下的服务器端的端口,只有服务器端确认了客户端的连接并且显示正常,客户端才能与服务器端进行信息交互;在连接成功后,用户可以直接在客户界面直接输入消息,通过服务器把消息发送到其他客户端;如果服务器端关闭,客户端在发送消息时,会提示“服务器已关闭,发送失败”;当客户端退出时,会提示服务器端本客户端已退出。

在客户端需要实现的功能:

1)可以输入服务器端的IP地址以及对应端口;2)可以与服务器端进行信息交互;3)与服务器端建立输入输出流管道。

2.4算法设计

2.4.1UML图如下:

下图(图一)为局域网聊天系统的总体结构,已经大概的把服务器端和客户端所要实现的功能都体现了出来。

服务器端的主要功能是:

启动服务器,停止服务器,发送信息,接收信息。

客户端的主要功能是:

建立连接,断开连接,发送信息,接收信息。

图一系统总体结构

2.4.2C/S模式套接字的连接

在系统实现信息传输时,服务器端和客户端通过输入输出流套接实现,在客户端建立输入流和输出流管道,在服务器端也建立相应的输入输出流管道,这样就可以通过JAVA软件实现文字信息交互。

通过这种C/S模式,可以很好的提高系统的各项性能。

2.4.3文字聊天的实现

在系统实现文字聊天时,首先,服务器启动,并监测分配的主机端口号;客户端在启动时,会提示用户输入服务器端的IP地址和固定端口,只有两者都输入正确,客户端与服务器端才能正确连接;在客户端输入信息后,通过C/S模式的套接字连接方法实现文字聊天。

2.5程序设计与实现

2.5.1建立连接

建立连接前,需要先启动服务器端,使服务器端对分配的固定端口进行循环监听;客户端启动时,要手动输入服务器端的IP地址和对应的固定端口,输入正确后才能建立连接;流程图如下(图二):

 

图二连接示意图

主要代码如下:

(1)服务器端publicclassChatServer:

i.启动服务器publicvoidstart()

ss=newServerSocket(6543);

onStart=true;

System.out.println("服务器已成功启动!

");

ii.客户端连接publicvoidstart()

while(onStart){

Sockets=ss.accept();

Clientc=newClient(s);

clients.add(c);

newThread(c).start();

System.out.println("一个客户端成功连接!

");

}

(2)客户端publicclassChatClientextendsJFrame:

System.out.print("请输入你的昵称:

");

myName=scan.readLine();

System.out.print("请输入服务器的ip:

(直接回车默认本机)");

ip=scan.readLine();

2.5.2断开连接

断开连接有两种方法:

一是,客户端正常退出,在服务器端会显示客户端退出;二是,服务器端可以主动关闭,客户端不会立即显示服务器关闭,会在客户端发送下一条信息时提示用户服务器端已经关闭;服务器端的主动关闭是非法的,所以要尽量的避免服务器的主动关闭流程图如下(图三):

 

图三断开连接示意图图

主要代码如下:

setText("服务器已断开","System");

try{

if(dos!

=null)

dos.close();

if(s!

=null)

s.close();

}catch(Exceptione11){

System.out.println("关闭连接出错!

");

}

2.5.3C/S模式套接字的连接

信息的传递是通过客户端与服务器端的输入输出流通道将信息通过TCP/IP协议打包传输,在客户端输入信息,通过JAVA的文字监控,将信息打包,通过管道传输;在客户端将信息发送出去后,服务器端会将信息发送至其他各个客户端;各个客户端收到信息后,会在其界面显示其他客户端发送的信息,格式为“用户名:

信息”;流程图如下(图四):

 

 

图四C/S模式套接

 

主要代码:

i.服务器端publicClient(Sockets):

publicClient(Sockets){

this.s=s;

try{

dis=newDataInputStream(s.getInputStream());

dos=newDataOutputStream(s.getOutputStream());

onConnect=true;

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

publicvoidsend(Stringstr){

try{

dos.writeUTF(str);

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

ii.客户端publicvoidsetText(Stringstr1,Stringstr2):

publicvoidsetText(Stringstr1,Stringstr2){

Strings="";

if(str2.equals("System")){

//如果是系统提示,则加上"系统提示:

"

s=textArea.getText();

s+="系统提示:

"+str1+"\r\n";

textArea.setText(s);

}else{

//其他的,什么都不加

s=textArea.getText();

s+=str1+"\r\n";

textArea.setText(s);

}

}

2.6程序测试与分析

2.6.1启动服务器

为了能够实现各个客户端之间能够实现信息的交互,所以需要有服务器端作为信息的中转,同时,有了服务器的存在,也可以使得客户端的数量大大增加,并且使得系统等性能大幅度提高;实际测试结果如下图(图五):

图五服务器启动

2.6.2启动客户端

在启动客户端的时候,需要输入用户自己的昵称,和服务器端的IP地址,服务器端的端口号在程序当中就已经实现了,所以不用输入端口号;这个界面没有做出图形界面,只是需要在终端窗口中输入。

实际测试结果如下(图六):

图六客户端启动

2.6.3成功启动客户端

在客户端启动时,如果输入的服务器IP地址正确,客户端的界面会跳出,而且服务器端也会提示有新的客户端成功连接;当显示客户端成功连接后,客户端才能与服务器端正常的进行信息交互。

实际测试结果如下(图七)

 

图七客户服务器成功连接

2.6.4聊天过程

在聊天过程中,用户只要在客户端输入信息,点击发送,信息就会通过客户端与服务器端之间的输入输出流通道发送至服务器端,然后由服务器端发送至其余的各个客户端。

在发送信息的过程中,每个客户端都会显示这条信息是哪一个客户端发送的,经过测试,延迟很低,即时性很好。

实际的测试结果如下图(图八):

图八聊天过程

2.6.5断开连接

服务器端与客户端之间断开连接有两种方式:

一是客户端主动关闭,服务器端会显示“一个客户端已退出”,这样退出不会引起其他客户端的正常聊天;二是服务器端主动关闭,这时,客户端不会显示服务器端关闭,只有在客户端发送下一条信息时,系统才会提示服务器端已经关闭,这种断开连接的方式需要尽量的避免,因为一旦服务器端关闭,各个客户端就不能继续进行信息交互。

这种断开连接的方式是非法的。

实际的测试结果如下图(图九):

图九客户服务器断开连接

2.7课程设计小结

通过这个聊天系统的设计,虽然很努力的去做,但是还是有些地方做的不好;例如:

没有把客户端启动时输入昵称和服务器端IP地址的界面做成用户图形界面,使得系统的美观有所下降;另外,在服务器端主动退出时,客户端不能及时的检测到服务器端的关闭,需要在发送下一条信息时才能检测到;这使得客户端一直处在阻塞状态。

这个系统也有较多的亮点。

例如:

在建立服务器端的时候,不用建立与数据库的联系,使得服务器端的程序比较简单,通用性也更强;系统采用C/S客户服务器的模式,使得系统的吞吐量大大增加,同时,也可以接受更多的客户端连接。

参考文献

[1]耿祥义《JAVA大学实用教程实验指导》.[M].北京.电子工业出版社2005

[2]张广彬,孟红蕊,《Java课程设计案例精编》.[M].北京.清华大学出版社2007

[3]黄晓东.《Java课程设计案例精编(第一版)》.[M].北京.中国水利水电出版社2004

[4]黄明等,梁旭,周绍斌.《Java课程设计》.[M].北京.电子工业出版社2006

[5]杨昭.《二级Java语言程序设计教程》.[M].北京.中国水利水电出版社2006

[6]赵毅主.《跨平台程序设计语言—Java》.[M].西安.西安电子科技大学出版社2006

[7]王路群.《Java高级程序设计》.[M].北京.中国水利水电出版社2006

课程设计总结

经过这次课程设计,我对Java又有了一定地深入了解,这次我选的题目是局域网聊天程序的实现,涉及的编程知识不是太多,主要就是Java网络编程那一块。

一开始拿到这个题目,其实并不知道如何下手,因为以前并没有做过此类的程序设计,对网络编程这一块的认识也相对较少。

为了写好程序,我开始去图书馆看相关的书籍,了解到利用套接字可以进行网络通讯相关的编程,知道了C/S模式下的局域网聊天程序的方式及其实现形式。

知道了要建立网络通讯连接,首先服务器要创建一个服务器的套接字,然后用accept()方法等待客户端的连接,客户端也创建一个客户端套接字,并通过服务器的IP地址和端口号连接服务器,再建立连接之后,就要定义两端的输入输出流,然后依据一定的协议进行数据传输,最后要注意关闭各自的套接字。

整个C/S模式的局域网通讯方式就是这样。

这次我写的程序相对简单,只实现了服务器和客户端的连接通讯,老师也觉得这个程序太简单了,确实简单了些,不过我也尝试过客户端与客户端的连接,但是似乎线程这一块的程序我并没有写好,总是报错,于是我变舍弃了客户端与客户端连接的实现,虽然课程设计结束了,但是我的Java之路还长,我会利用暑假时间好好补习一下,好好完善我的程序。

总的来说,这次课程设计的收获还是很大的,尤其在网络编程,和线程的使用这一块,学到了很多,自己对Java的兴趣也是越开越浓,希望在今后的学习中,自己能够取得不断的进步,让自己的大学变的充实而又精彩。

致谢

本课题在选题及进行过程中得到高老师的悉心指导。

过程中,高老师多次帮助我分析思路,开拓视角,在我遇到困难想放弃的时候给予我最大的支持和鼓励。

高老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。

再多华丽的言语也显苍白。

在此,谨向高老师致以诚挚的谢意和崇高的敬意。

 

   感谢这一段时间来所有老师对我学习上的帮助和生活上的关怀,正是您们的辛勤工作,才使我得以顺利地完成此次课程设计。

浓浓师恩,终生不忘。

 

   感谢班级里的所有同学,正是有你们的帮助才能让我更好的完成了此次课设,有你们真好,一生的友谊,永不会忘。

附录

1.服务器代码

packagecom.chat;

import.*;

importjava.util.Vector;

importjava.io.*;

publicclassChatServer{

ServerSocketss=null;

booleanonStart=false;

Vectorclients=newVector();

publicstaticvoidmain(String[]args){

newChatServer().start();

}

publicvoidstart(){

try{

ss=newServerSocket(6543);

onStart=true;

System.out.println("服务器已成功启动!

");

}catch(BindExceptione){

System.out.println("端口使用中!

");

}catch(Exceptione1){

e1.printStackTrace();

}

try{

while(onStart){

Sockets=ss.accept();

Clientc=newClient(s);

clients.add(c);

newThread(c).start();

System.out.println("一个客户端成功连接!

");

}

}catch(Exceptione){

try{

ss.close();

}catch(IOExceptione1){

//TODOAuto-generatedcatchblock

e1.printStackTrace();

}

e.printStackTrace();

}

}

 

classClientimplementsRunnable{

privateSockets=null;

privateDataInputStreamdis=null;

privatebooleanonConnect=false;

privateDataOutputStreamdos=null;

publicClient(Sockets){

this.s=s;

try{

dis=newDataInputStream(s.getInputStream());

dos=newDataOutputStream(s.getOutputStream());

onConnect=true;

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

publicvoidsend(Stringstr){

try{

dos.writeUTF(str);

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

@Override

publicvoidrun(){

//TODOAuto-generatedmethodstub

Stringstr="";

while(onConnect){

try{

str=dis.readUTF();

System.out.println(str);

for(inti=0;i

Clientc=clients.get(i);

if(c.onConnect==false){

clients.remove(c);

}elseif(c!

=this){

c.send(str);

System.out.println("amassageissended!

");

}

}

}catch(SocketExceptione){

//TODOAuto-generatedcatchblock

System.out.println("一个客户端已退出!

");

onConnect=false;

//e.printStackTrace();

}catch(Exceptione){

try{

if(dis!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1