JAVA局域网聊天课程设计Word格式文档下载.docx
- 文档编号:5830949
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:23
- 大小:1.28MB
JAVA局域网聊天课程设计Word格式文档下载.docx
《JAVA局域网聊天课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《JAVA局域网聊天课程设计Word格式文档下载.docx(23页珍藏版)》请在冰点文库上搜索。
5)Java的异常处理机制
6)Java的数据库连接技术
7)Java的多线程技术与动画制作
8)Java的网络编程
设计报告书封面和正文格式要符合淮海工学院课程设计报告书封面与正文标准格式要求,设计报告内容不少5000字。
本课程设计报告内容包括:
课程设计目的、设计任务与要求、设计说明书(包括:
需求分析、概要设计、详细设计)、设计成果(包括:
运行界面、主要代码、测试结果)和设计心得、附录或参考资料几个部分。
(1)每位同学通过智能教学平台需提交可独立运行的应用程序,要求程序书写规范,源程序需加必要的注释;
(2)每位同学需独立提交书面设计报告书(每人一份),要求编排格式统一、规范、内容充实,同时通过教学平台提交设计报告电子版;
(3)提交日期:
第19周周二(2012年6月26日)之前。
3.课程设计说明书
(1)需求分析
功能分析:
服务器端具有建立侦听服务,转发聊天信息,响应用户下线,统计在线人数。
客户端具有请求登陆,请求下线,发送接收群聊和私聊信息,记事本,发送接收文件功能。
表1服务器各模块名称功能汇总表
序号
模块名
基本功能
1
端口设置
设置侦听的端口号,默认为7777。
2
启动服务
开启侦听端口,允许客户端连接。
3
停止服务
关闭倾听端口,中断所有客户端的连接。
再次点击则退出。
4
帮助
显示各个模块的功能及操作方法。
5
状态栏
统计在线人数。
表2客户端各模块名称功能汇总表
连接设置
设置要连接的服务器所在主机的IP地址和侦听听端口。
文件传输
可以与指定的IP地址传送文件。
记事本
记录重要的信息并存到本地。
换肤
更改背景图片(可换四种)。
发送
发送聊天内容。
6
退出
关闭客户端。
(2)概要设计
3、详细设计
服务器端主要包括4个文件,它们的功能如下:
1.Server.java:
其主要功能为定义服务器端的界面,添加事件侦听与事件处理。
调用serverRun类来实现服务器端对客户端的连接;
调用Details类来实现服务器端用户上线与下线的侦听;
用变长数组来记录用户列表。
2.PortConf.java:
是用户对服务器侦听端口进行修改配置的类。
3.Objecting.java:
要传输某一类的对象,就要实现Serializable接口,就可以在网络上传输。
4.ServerHelp.java:
服务器端的帮助。
客户端主要包括5个文件,它们的功能如下:
1.LogIn.java:
注册并登陆到服务器。
2.Client.java:
其主要功能为定义客户端的界面,添加事件侦听与事件处理。
该类定义了connect()与disconnect()方法实现与服务器的连接和断开连接;
调用ClientSocket类实现客户端消息的接收,然后转发到客户端的主界面上。
3.ConnectConf.java:
是用户对所要连接的服务器IP地址和端口的配置。
4.NoteBook.java:
记录重要的事情,并存在本地。
5.UserHelp.java:
客户端的帮助信息。
表3聊天室基本功能表
文件名
Server.java
启动服务器
LogIn.java
注册登录。
Client.java
客户端主界面。
ConnectConf.java
设置连接的服务器IP地址和端口。
PortConf.java
设置服务器侦听端口。
Objecting.java
传输对象。
7
NoteBook.java
便签,可保存到本地。
8
ServerHelp.java
服务端帮助信息
9
UserHelp.java
客户端帮助信息。
4.课程设计成果
运行界面:
1服务端
服务端界面(Server.java):
端口设置界面:
服务端帮助界面:
2注册登录界面(LogIn.java):
3客户端主界面:
私聊界面:
另一头客户端:
客户端连接设置:
记事本界面:
换肤:
客户端帮助界面:
主要代码:
Server.java//服务端
classserverRunextendsThread{
publicvoidrun(){
try{
System.out.println("
开始SERVERRUN"
);
serversocket=newServerSocket(port);
area.append((newDate()).toLocaleString()+"
服务器启动@"
+port
+"
端口正在侦听...\n"
start.setEnabled(false);
set.setEnabled(false);
while(true){
Socketsocket=serversocket.accept();
//接受1个客户连接
System.out.println("
连接成功"
BufferedReaderbr=newBufferedReader(
newInputStreamReader(socket.getInputStream()));
//获得客户名称
Stringname=br.readLine();
area.append((newDate()).toLocaleString()+"
服务器接收用户"
+name+"
的连接\n"
soconly.add(socket);
//收集所有SOCKET
num++;
showStatus.setText("
当前在线人数:
"
+num);
//发送新用户消息
Iteratori=soconly.iterator();
while(i.hasNext()){
Sockets=(Socket)i.next();
//获得其他SOCKET的通信口
ObjectOutputStreamout=newObjectOutputStream(s
.getOutputStream());
out.writeObject("
【系统消息】"
+name+"
用户进入"
}
sockets.put(name,socket);
//收集所有有标市的SOCKET
Vectorv=getList();
Iteratorj=soconly.iterator();
while(j.hasNext()){
Sockets=(Socket)j.next();
//获得其他SOCKET的通信口
out.writeObject(v);
System.out.println("
服务器发送用户列表进入"
}
Detailsd=newDetails(socket);
socket_thread.put(name,d);
//收集SOCKET线乘
d.start();
}
}catch(Exceptione){
e.printStackTrace();
}}}
classDetailsextendsThread{
booleanalive=true;
ObjectInputStreamin;
ObjectOutputStreamout;
Socketsocket;
//客户SOCKET
Details(Socketsocket){
this.socket=socket;
}
while(alive){
try{
in=newObjectInputStream(socket.getInputStream());
Objectingobjecting=(Objecting)in.readObject();
//获得对象
Stringname=objecting.getKey();
//获得名字
Stringcontent=objecting.getValue();
//获得内容
if(name.equalsIgnoreCase("
all"
)){
Iteratori=soconly.iterator();
while(i.hasNext()){
Sockets=(Socket)i.next();
out=newObjectOutputStream(s.getOutputStream());
out.writeObject(content);
System.out.println("
Send"
}
exit"
Detailsthread=(Details)socket_thread.get(content);
thread.alive=false;
area.append((newDate()).toLocaleString()+"
+content+"
离开\n"
socket.close();
soconly.remove(socket);
//群发SOCKET消失
sockets.remove(content);
//标市SOCKET消失
num--;
showStatus.setText("
out.writeObject("
+content+"
用户离开"
Vectorv=getList();
Iteratorj=soconly.iterator();
while(j.hasNext()){
Sockets=(Socket)j.next();
ObjectOutputStreamout=newObjectOutputStream(s
.getOutputStream());
out.writeObject(v);
服务器发送用户列表离开"
if(!
name.equalsIgnoreCase("
)
&
!
area
.append((newDate()).toLocaleString()
+"
处理私聊信息\n"
Sockets=(Socket)sockets.get(name);
out=newObjectOutputStream(s.getOutputStream());
out.writeObject(content);
}catch(Exceptione){
e.printStackTrace();
}
}
Client.java//客户端
classClientSocketextendsThread{
PrintWriterpw;
pw=newPrintWriter(socket.getOutputStream(),true);
pw.println(name);
//发送标记信息!
名字
while(true){
Objecto=in.readObject();
if(oinstanceofString){
area.append(o.toString()+"
\n"
if(oinstanceofVector){
列表操作"
Vectorv=(Vector)o;
list.removeAll();
Object[]obj=v.toArray();
for(inti=0;
i<
obj.length;
i++){
System.out.println((String)obj[i]);
list.add((String)obj[i]);
list.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Stringto=list.getSelectedItem();
Stringcontent=JOptionPane.showInputDialog(null,"
输入向"
+to
发送的私聊信息"
"
私聊"
JOptionPane.INFORMATION_MESSAGE);
if(content==null){
return;
}else{
Objectingo=newObjecting(to,"
◆◆私聊信息◆◆\n"
+(newDate()).toLocaleString()+"
+content);
//获得消息准备发送
try{
ObjectOutputStreamout=newObjectOutputStream(socket
out.writeObject(o);
JOptionPane.showMessageDialog(null,to+"
收到消息"
}catch(Exceptione2){
e2.printStackTrace();
});
text.addActionListener(newActionListener(){
if(text.getText().equals("
"
JOptionPane.showMessageDialog(null,"
消息为空"
Objectingo=newObjecting("
name+"
:
+text.getText());
text.setText("
Objecting.java//传输对象
publicclassObjectingimplementsSerializable{
Stringkey;
Stringvalue;
publicObjecting(){}
publicObjecting(Stringkey,Stringvalue){
this.key=key;
this.value=value;
publicvoidsetKey(Stringkey){
this.key=key;
publicvoidsetValue(Stringvalue){
this.value=value;
publicStringgetKey(){
returnkey;
publicStringgetValue(){
returnvalue;
}}
测试结果:
1客户端
端口设置:
·
设置成功
设置失败
在线人数:
停止:
②客户端:
连接设置:
成功:
失败:
记事本:
5.课程设计心得
这次的课程设计,我觉得还是很成功的。
先是成功实现了此次设计的要求,另外我还添加了一些辅助功能。
一开始并不打算选这个题目的时候,后来只是抱着试试看的心理,这部分的知识应该说是没有学过,老师上课也没有讲这个SOCKET套接字的部分,是要我们课后自己看的。
我只好把书上的一段基于客户-服务器端的计算三角形面积的java代码先调试一下,熟悉一下代码运行的效果,给我一点思路。
再根据这个程序的框架,来编写代码,但是后来发现自己编代码并不简单,折腾了好久也没成功,觉得自己的设计思路有点偏差,所以才导致这个程序的失败,看来把理论变成实践可真不是一件简简单单就能完成的事。
接下来的几天,我只好到网上的一些专门学习JAVA的论坛里找些资料来看看,也试着调试调试别人编的程序,好给自己的课程设计定一个大体的框架。
在坛子里逛了许久,我的程序的雏形就也差不多完成了,只是简单的聊天功能,运行服务器,在给定端口侦听,转发客户端的消息,最后显示在客户端聊天窗口的文本域中。
虽然这才是只是一点点的成功,但也使这次课程设计有了好的开端,我相信后面的问题也就不算问题了。
我又陆陆续续地添加些功能,让程序更加丰满,最重要的是设计出来的程序更加的合理,更人性化。
先是聊天室服务器端启动服务器时,将创建侦听套接字,创建用户列表,创建并启动侦听线程。
用户登录时,将创建套接字,与服务器直接连接,并创建客户端接收线程。
服务器端侦听到有用户上线后,将创建新的用户节点,并在主界面上显示用户上线,发送新的用户列表。
客户端发送信息时,将要发送的内容通过output.writeObject();
进行发送。
服务器端发送信息时,如果是发送给所有人,就遍历用户链表,如果是发送给某个用户,先在链表中找到该节点,通过output.writeObject()发送信息。
服务器端和客户端接收信息时,先读取聊天信息标识,做出判断后,依次读取信息,处理信息,并在主界面上显示。
服务器端还要将准备好的信息转发给指定的用户。
当服务器端侦听到有用户下线后,将删除该用户节点,并在主界面上显示用户下线,发送新的用户列表。
服务器端停止服
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 局域网 聊天 课程设计