2023年JAVA实训报告-聊天室_第1页
2023年JAVA实训报告-聊天室_第2页
2023年JAVA实训报告-聊天室_第3页
2023年JAVA实训报告-聊天室_第4页
2023年JAVA实训报告-聊天室_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

提交评论