JAVA实训报告--聊天室的相关参考范文,JAVA实训报告--聊天室本文关键词:实训,聊天室,报告,JAVAJAVA实训报告--聊天室本文简介:《Java实训》设计报告《Java实训》设计报告电子信息工程学院专业:软件技术班级:1班实训:聊天室项......
JAVA实训报告--聊天室 本文关键词:实训,聊天室,报告,JAVA
JAVA实训报告--聊天室 本文简介:《Java实训》设计报告《Java实训》设计报告电子信息工程学院专业:软件技术班级:1班实训:聊天室项目简介项目名称聊天室项目功能运用java程序编写聊天室,实现简单的聊天功能。它是图形界面,线程,流与文件系统等技术的综合应用。其界面主要采用了java.awt包,java.swing包以及java.
JAVA实训报告--聊天室 本文内容:
《Java实训》设计报告
《Java实训》设计报告
电子信息工程学院
专业:
软件技术
班级:
1班
实训:聊天室
项目简介
项目名称
聊天室
项目功能
运用java程序编写聊天室,实现简单的聊天功能。它是图形界面,线程,流与文件系统等技术的综合应用。其界面主要采用了java.awt包,java.swing包以及java.util包等。程序实现了聊天室的基本功能,其中有:
1、启动服务器。
2、进入客户端界面。
3、登录聊天室。
4、发送信息(实现按回车键发送消息)。
5、关闭服务器
项目目的
1.能在程序中熟练应用Java
多线程技术
2.熟悉Java
C/S
程序的结构和工作原理
3.能开发客户端应用程序
4.会编写服务器端多线程应用程序。
5.熟悉Java
数据库连接方法,
能在程序中读写数据库
主要技术
Java编程语言、javaSwing组件
开发环境
jdk1.6.0_10
项
目
特
点
使用组件构建的C/S应用程序
各项功能的组织合理搭配应用
图标控制功能实现
技
术
重
点
构建基于C/S架构的应用程序
Swing组件应用
事件监听的应用
方法的编写
技
术
难
点
Swing组件的应用
事件监听器的使用
异常处理
方法简便的选择
系统总体设计
1、设计思路
聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:
在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。
1.首先通过继承JFrame类构造服务器界面。
2.设计客户端程序使其能够完成正常的通信功能。
3.设计监听程序,使其显示登录的ip地址端口号,以及用户昵称,通过侦听按钮可以调用客户端程序,实现聊天功能。
2、各个模块详细的功能描述。
1、服务器端功能描述:
启动服务器端。
2、客户端功能描述:
启动客户端;
显示登录昵称:
显示聊天记录:
发送信息;
退出聊天室。
系统详细设计
1、界面设计
主要由类ChatRoom来实现,界面实际总体如下:输入昵称的文本框,输入IP地址的文本框以及输入端口的文本框;连接的按钮;退出按钮;接受消息的文本域;发送消息文本框;发送按钮。
项目设计
在设计聊天室时,编写3个Java源文件:Client.java、Frame1.java、ServerThread.java;
分别放在两个包中,一个是client,放Client.java、Frame1.java;一个是server,放ServerThread.java;聊天室除了上述Java源文件所给出的类外,还需要Java系统提供的一些重要类,如JButton,JTextField等。
下面是Java源文件的总体设计。
Client(主类)客户端
Client类负责创建聊天室客户端的主窗口,该类含有main方法,计算器从该类开始执行。
ServerThread(主类)服务器
ServerThread类负责创建聊天室服务器的主窗口,该类含有main方法,计算器从该类开始执行。
二详细代码设计
聊天室程序设计详细代码如下:
客户端代码:
package
client;
import
javax.swing.UIManager;
public
class
Client
{
public
Client(){
Frame1
frame=new
Frame1();
frame.setVisible(true);
frame.validate();
}
public
static
void
main(String[]
args){
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(Exception
e){
e.printStackTrace();
}
new
Client();
}
}
package
client;
import
java.awt.*;
import
java.awt.event.*;
import
javax.swing.*;
import
java.net.*;
import
java.io.*;
public
class
Frame1
extends
JFrame
implements
Runnable{
private
JPanel
contentPane;
private
TextArea
textArea1=new
TextArea();
private
Label
label1=new
Label();
private
JTextField
textField1=new
JTextField();
private
JButton
button1=new
JButton();
private
JButton
button2=new
JButton();
private
JButton
button3=new
JButton();
Socket
socket=null;
BufferedReader
in=null;
PrintWriter
out=null;
JTextField
server=new
JTextField();
JLabel
jLabel1=new
JLabel();
JLabel
jLabel2=new
JLabel();
JTextField
port=new
JTextField();
JScrollPane
jScrollPane1=new
JScrollPane();
JList
jList1=new
JList();
JLabel
jLabel3=new
JLabel();
DefaultListModel
l1=new
DefaultListModel();
public
Frame1(){
try{
init();
}catch(Exception
e){
e.printStackTrace();
}
}
private
void
init()
throws
Exception{
server.setText(InetAddress.getLocalHost().getHostAddress());
server.setBounds(new
Rectangle(69,252,74,22));
contentPane=(JPanel)this.getContentPane();
textArea1.setEditable(false);
textArea1.setFont(new
java.awt.Font(“Dialog“,Font.PLAIN,14));
textArea1.setBounds(new
Rectangle(11,9,383,199));
textArea1.setBackground(new
Color(66,00,233));
textArea1.setForeground(new
Color(255,00,00));
contentPane.setLayout(null);
this.setSize(new
Dimension(506,314));
this.setTitle(“客户端“);
label1.setFont(new
java.awt.Font(“Dialog“,Font.PLAIN,12));
label1.setForeground(new
Color(110,110,250));
label1.setText(“消息:“);
label1.setBounds(new
Rectangle(26,213,32,27));
button1.setActionCommand(“发送“);
button1.setBounds(new
Rectangle(334,216,62,23));
button1.setEnabled(false);
button1.setFont(new
java.awt.Font(“Dialog“,Font.PLAIN,12));
button1.setText(“发送“);
button1.setForeground(new
Color(110,110,250));
button1.addActionListener(new
java.awt.event.ActionListener(){
public
void
actionPered(ActionEvent
e){
button1_actionPered(e);
}
});
button2.setBounds(new
Rectangle(266,251,58,24));
button2.setFont(new
java.awt.Font(“Dialog“,Font.PLAIN,12));
button2.setText(“连接“);
button2.setForeground(new
Color(110,110,250));
button2.addActionListener(new
java.awt.event.ActionListener(){
public
void
actionPered(ActionEvent
e){
button2_actionPered(e);
}
});
button3.setBounds(new
Rectangle(333,251,62,22));
button3.setFont(new
java.awt.Font(“Dialog“,Font.PLAIN,12));
button3.setText(“退出“);
button3.setForeground(new
Color(110,110,250));
button3.addActionListener(new
java.awt.event.ActionListener(){
public
void
actionPered(ActionEvent
e){
button3_actionPered(e);
}
});
jLabel1.setFont(new
java.awt.Font(“Dialog“,Font.PLAIN,12));
jLabel1.setToolTipText(““);
jLabel1.setHorizontalAlignment(SwingConstants.RIGHT);
jLabel1.setHorizontalTextPosition(SwingConstants.RIGHT);
jLabel1.setText(“服务器:“);
jLabel1.setForeground(new
Color(110,110,250));
jLabel1.setBounds(new
Rectangle(11,254,58,20));
jLabel2.setFont(new
java.awt.Font(“Dialog“,Font.PLAIN,12));
jLabel2.setToolTipText(““);
jLabel2.setHorizontalAlignment(SwingConstants.RIGHT);
jLabel2.setHorizontalTextPosition(SwingConstants.RIGHT);
jLabel2.setText(“端口:“);
jLabel2.setForeground(new
Color(110,110,250));
jLabel2.setBounds(new
Rectangle(172,253,27,18));
port.setText(“8000“);
port.setBounds(new
Rectangle(202,251,40,22));
jList1.setFont(new
java.awt.Font(“Dialog“,Font.PLAIN,12));
jLabel3.setBounds(new
Rectangle(406,254,91,21));
jLabel3.setForeground(new
Color(110,110,250));
textField1.setBounds(new
Rectangle(58,215,271,24));
jScrollPane1.setBounds(new
Rectangle(404,14,94,226));
jScrollPane1.getViewport().add(jList1);
contentPane.add(button3,null);
contentPane.add(button2,null);
contentPane.add(button1,null);
contentPane.add(server,null);
contentPane.add(jLabel1,null);
contentPane.add(textField1,null);
contentPane.add(textArea1,null);
contentPane.add(jLabel2,null);
contentPane.add(port,null);
contentPane.add(label1,null);
contentPane.add(jScrollPane1,null);
contentPane.add(jLabel3,null);
jList1.setModel(l1);
}
void
button1_actionPered(ActionEvent
e){
out.println(jLabel3.getText()+“对“+l1.getElementAt(jList1.getSelectedIndex())+“说:“+textField1.getText());
out.();
textField1.setText(““);
}
void
button3_actionPered(ActionEvent
e){
try{
out.println(“大家尽情聊,再见!“);
out.();
}catch(Exception
e2){}
finally{
System.exit(0);
}
}
void
button2_actionPered(ActionEvent
e){
Thread
thread=new
Thread(this);
thread.start();
}
public
void
run(){
try{
socket=new
Socket(server.getText(),Integer.parseInt(port.getText()));
in=new
BufferedReader(new
StreamReader(socket.getStream()));
out=new
PrintWriter(socket.getOutputStream());
button1.setEnabled(true);
receiver
r=new
receiver();
Thread
t=new
Thread(r);
t.start();
textArea1.append(“欢迎加入聊天室/n“);
//
button2.setEnabled(false);
}catch(Exception
e){
textArea1.append(“连接失败!请确认服务器地址并且服务器已启动/n“);
}
}
private
class
receiver
implements
Runnable{
public
void
run(){
String
s1=null;
try{
s1=in.readLine();
while(s1!=null){
if(s1.equals(“Clear
users!“)){
l1.removeAllElements();
l1.addElement(“大家“);
jList1.setSelectedIndex(0);
}else
if(jLabel3.getText().equals(““)){
jLabel3.setText(s1);
}else
if(s1.length()<8
}else
if(!jLabel3.getText().equals(s1)){
textArea1.append(s1+“/n“);
}
s1=in.readLine();
}
in.close();
out.close();
socket.close();
}catch(Exception
e){}
button1.setEnabled(false);
}
}
}
服务器端代码:
package
server;
import
java.net.*;
import
java.io.*;
public
class
ServerThread
implements
Runnable{
ServerSocket
server=null;
BufferedReader
in=null;
PrintWriter
out=null;
InetAddress
myServer=null;
Object
users[]=new
Object[1000];
static
int
userCount=0;
public
ServerThread(){
try{
init();
}catch(Exception
e){
e.printStackTrace();
}
}
private
void
init()
throws
Exception{
Thread
thread=new
Thread(this);
thread.start();
}
public
void
run(){
try{
server=new
ServerSocket(8000);
Socket
socket;
while(true){
socket=server.accept();
if(socket!=null){
users[userCount]=socket;
Receiver
r=new
Receiver(socket,userCount);
Thread
t=new
Thread(r);
t.start();
userCount++;
}
}
}catch(Exception
e){
e.printStackTrace();
}
}
private
class
Receiver
implements
Runnable{
Socket
socket;
int
user;
Receiver(Socket
socket,int
user){
this.socket=socket;
this.user=user;
}
public
void
run(){
BufferedReader
in=null;
PrintWriter
out=null;
String
s1=null;
int
userNo;
try{
out=new
PrintWriter(socket.getOutputStream());
out.println(“user“+user);
out.();
for(int
j=0;j if(users[j]==null) continue; out=new PrintWriter(((Socket)users[j]).getOutputStream()); out.println(“Clear users!“); out.(); for(int k=0;k out.println(“user“+k); out.(); } } in=new BufferedReader(new StreamReader(socket.getStream())); s1=in.readLine(); while(!s1.equals(“大家尽情聊,再见!“)){ int temp=s1.indexOf(“对“); int temp1=s1.indexOf(“说“); String temps=s1.substring(temp+1,temp1); if(temps.equals(“大家“)){ for(int j=0;j if(users[j]==null) continue; out=new PrintWriter(((Socket)users[j]).getOutputStream()); out.println(s1); out.(); } }else{ try{ userNo=Integer.parseInt(temps.substring(4)); out=new PrintWriter(((Socket)users[userNo]).getOutputStream()); out.println(s1); out.(); }catch(Exception e){} } s1=in.readLine(); } System.out.print(“User go“); in.close(); out.close(); socket.close(); }catch(Exception e){} } } public static void main(String[]args){ new ServerThread(); } } 运行结果 1、 连接服务器 小结 这次设计经过长期的不懈努力,程序基本满足聊天的需要。完成后的程序实现了用户登陆聊天室、用户在线聊天、用户退出等功能。 程序设计期间,通过询问老师,同学和网上搜索相关解答等多种方式学习到很多课堂上没有的知识,还积累了一定的实践经验,增强了动手能力和解决实际问题的能力。在此之前,对于Java编程技术或网络socket编程知识都只是略知皮毛,缺乏深入的认识,对其工作方式和原理缺乏透彻的认识。在这段时间里,我认真学习了Java语言开发,Applet小程序实现,对编程思想有了进一步的体会,养成了一些良好的编程习惯。程序虽然完成,但是距离优秀仍存在一定差距,用JAVA开发大型项目还有很多我需要去努力学习的知识。希望自己能不断学习和实践,争取以后做得更好。