JAVA實(shí)訓(xùn)報(bào)告聊天室_第1頁
JAVA實(shí)訓(xùn)報(bào)告聊天室_第2頁
JAVA實(shí)訓(xùn)報(bào)告聊天室_第3頁
JAVA實(shí)訓(xùn)報(bào)告聊天室_第4頁
JAVA實(shí)訓(xùn)報(bào)告聊天室_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

JAVA實(shí)訓(xùn)報(bào)告--聊天室《Java實(shí)訓(xùn)》設(shè)計(jì)報(bào)告

《Java實(shí)訓(xùn)》設(shè)計(jì)報(bào)告

電子信息工程學(xué)院

專業(yè):

軟件技術(shù)

班級(jí):

1班

實(shí)訓(xùn):談天室

工程簡(jiǎn)介

工程名稱

談天室

工程功能

運(yùn)用java程序編寫談天室,實(shí)現(xiàn)簡(jiǎn)潔的談天功能。它是圖形界面,線程,流與文件系統(tǒng)等技術(shù)的綜合應(yīng)用。其界面主要采納了java.awt包,java.swing包以及java.util包等。程序?qū)崿F(xiàn)了談天室的根本功能,其中有:

1、啟動(dòng)效勞器。

2、進(jìn)入客戶端界面。

3、登錄談天室。

4、發(fā)送信息(實(shí)現(xiàn)按回車鍵發(fā)送消息)。

5、關(guān)閉效勞器

工程目的

1.能在程序中嫻熟應(yīng)用Java

多線程技術(shù)

2.熟識(shí)Java

C/S

程序的構(gòu)造和工作原理

3.能開發(fā)客戶端應(yīng)用程序

4.會(huì)編寫效勞器端多線程應(yīng)用程序。

5.熟識(shí)Java

數(shù)據(jù)庫連接方法,

能在程序中讀寫數(shù)據(jù)庫

主要技術(shù)

Java編程語言、javaSwing組件

開發(fā)環(huán)境

jdk1.6.0_10

項(xiàng)

點(diǎn)

使用組件構(gòu)建的C/S應(yīng)用程序

各項(xiàng)功能的組織合理搭配應(yīng)用

圖標(biāo)掌握功能實(shí)現(xiàn)

術(shù)

點(diǎn)

構(gòu)建基于C/S架構(gòu)的應(yīng)用程序

Swing組件應(yīng)用

大事監(jiān)聽的應(yīng)用

方法的編寫

術(shù)

點(diǎn)

Swing組件的應(yīng)用

大事監(jiān)聽器的使用

特別處理

方法簡(jiǎn)便的選擇

系統(tǒng)總體設(shè)計(jì)

1、設(shè)計(jì)思路

談天系統(tǒng)的設(shè)計(jì)跟一般網(wǎng)站設(shè)計(jì)有著很多不同的地方,一般網(wǎng)站設(shè)計(jì)所考慮的因素,例如,一般網(wǎng)站需要對(duì)布局進(jìn)入大量美化以及動(dòng)畫設(shè)計(jì)等等,而談天室只要供應(yīng)滿意訪客雙方直接實(shí)時(shí)談天即可。因此,在設(shè)計(jì)談天系統(tǒng)的過程中,必需要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):

在Internet上的談天程序一般都是以效勞器供應(yīng)效勞端連接響應(yīng),使用者通過客戶端程序登錄到效勞器,就可以與登錄在同一效勞器上的用戶交談,這是一個(gè)面對(duì)連接的通信過程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)效勞器端和客戶端兩局部程序。

1.首先通過繼承JFrame類構(gòu)造效勞器界面。

2.設(shè)計(jì)客戶端程序使其能夠完成正常的通信功能。

3.設(shè)計(jì)監(jiān)聽程序,使其顯示登錄的ip地址端口號(hào),以及用戶昵稱,通過偵聽按鈕可以調(diào)用客戶端程序,實(shí)現(xiàn)談天功能。

2、各個(gè)模塊具體的功能描述。

1、效勞器端功能描述:

啟動(dòng)效勞器端。

2、客戶端功能描述:

啟動(dòng)客戶端;

顯示登錄昵稱:

顯示談天記錄:

發(fā)送信息;

退出談天室。

系統(tǒng)具體設(shè)計(jì)

1、界面設(shè)計(jì)

主要由類ChatRoom來實(shí)現(xiàn),界面實(shí)際總體如下:輸入昵稱的文本框,輸入IP地址的文本框以及輸入端口的文本框;連接的按鈕;退出按鈕;承受消息的文本域;發(fā)送消息文本框;發(fā)送按鈕。

工程設(shè)計(jì)

在設(shè)計(jì)談天室時(shí),編寫3個(gè)Java源文件:Client.java、Frame1.java、ServerThread.java;

分別放在兩個(gè)包中,一個(gè)是client,放Client.java、Frame1.java;一個(gè)是server,放ServerThread.java;談天室除了上述Java源文件所給出的類外,還需要Java系統(tǒng)供應(yīng)的一些重要類,如JButton,JTextField等。

下面是Java源文件的總體設(shè)計(jì)。

Client(主類)客戶端

Client類負(fù)責(zé)創(chuàng)立談天室客戶端的主窗口,該類含有main方法,計(jì)算器從該類開頭執(zhí)行。

ServerThread(主類)效勞器

ServerThread類負(fù)責(zé)創(chuàng)立談天室效勞器的主窗口,該類含有main方法,計(jì)算器從該類開頭執(zhí)行。

二具體代碼設(shè)計(jì)

談天室程序設(shè)計(jì)具體代碼如下:

客戶端代碼:

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(“發(fā)送“);

button1.setBounds(new

Rectangle(334,216,62,23));

button1.setEnabled(false);

button1.setFont(new

java.awt.Font(“Dialog“,Font.PLAIN,12));

button1.setText(“發(fā)送“);

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()+“對(duì)“+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(“連接失?。≌?qǐng)確認(rèn)效勞器地址并且效勞器已啟動(dòng)/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<userCount;j++){

if(users[j]==null)

continue;

out=new

PrintWriter(((Socket)users[j]).getOutputStream());

out.println(“Clear

users!“);

out.();

for(int

k=0;k<userCount;k++){

out.println(“user“+k);

out.();

}

}

in=new

BufferedReader(new

StreamReader(socket.getStream()));

s1=in.readLine();

while(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論