




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA实训报告-聊天室工作与生活中常常需要使用到实训,报告相关的资讯,这也正越来越成为工作中的必需,为此收集整理了以下JAVA实训报告-谈天室,欢迎借鉴参考,盼望对大家有所关心。
篇1:JAVA实训报告-谈天室
《Java实训》设计报告
电子信息工程学院
专业:软件技术
班级:1班
实训:谈天室
项目简介
项目名称
谈天室
项目功能
运用java程序编写谈天室,实现简洁的谈天功能。它是图形界面,线程,流与文件系统等技术的综合应用。其界面主要采纳了java.awt包,java.swing包以及java.util包等。程序实现了谈天室的基本功能,其中有:
1、启动服务器。
2、进入客户端界面。
3、登录谈天室。
4、发送信息(实现按回车键发送消息)。
5、关闭服务器
项目目的
1.能在程序中娴熟应用Java
多线程技术
2.熟识JavaC/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
java*.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(E*ception
e){
e.printStackTrace();
}
new
Client();
}
}
package
client;
import
java.awt.*;
import
java.awt.event.*;
import
java*.swing.*;
import
.*;
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(E*ception
e){
e.printStackTrace();
}
}
private
void
init()
throws
E*ception{
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.getSelectedInde*())+"说:"+textField1.getText());
out.();
textField1.setText("");
}
void
button3_actionPered(ActionEvent
e){
try{
out.println("大家尽情聊,再见!");
out.();
}catch(E*ception
e2){}
finally{
System.e*it(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(E*ception
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.setSelectedInde*(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(E*ception
e){}
button1.setEnabled(false);
}
}
}
服务器端代码:
package
server;
import
.*;
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(E*ception
e){
e.printStackTrace();
}
}
private
void
init()
throws
E*ception{
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(E*ception
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
您正在扫瞄的文章由www.glwk8.om()整理,版权归原、原出处全部。
StreamReader(socket.getStream()));
s1=in.readLine();
while(!s1.equals("大家尽情聊,再见!")){
int
temp=s1.inde*Of("对");
int
temp1=s1.inde*Of("说");
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(E*ception
e){}
}
s1=in.readLine();
}
Syst
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论