java课程设计报告聊天室.docx

上传人:b****2 文档编号:3275277 上传时间:2023-05-05 格式:DOCX 页数:72 大小:170.70KB
下载 相关 举报
java课程设计报告聊天室.docx_第1页
第1页 / 共72页
java课程设计报告聊天室.docx_第2页
第2页 / 共72页
java课程设计报告聊天室.docx_第3页
第3页 / 共72页
java课程设计报告聊天室.docx_第4页
第4页 / 共72页
java课程设计报告聊天室.docx_第5页
第5页 / 共72页
java课程设计报告聊天室.docx_第6页
第6页 / 共72页
java课程设计报告聊天室.docx_第7页
第7页 / 共72页
java课程设计报告聊天室.docx_第8页
第8页 / 共72页
java课程设计报告聊天室.docx_第9页
第9页 / 共72页
java课程设计报告聊天室.docx_第10页
第10页 / 共72页
java课程设计报告聊天室.docx_第11页
第11页 / 共72页
java课程设计报告聊天室.docx_第12页
第12页 / 共72页
java课程设计报告聊天室.docx_第13页
第13页 / 共72页
java课程设计报告聊天室.docx_第14页
第14页 / 共72页
java课程设计报告聊天室.docx_第15页
第15页 / 共72页
java课程设计报告聊天室.docx_第16页
第16页 / 共72页
java课程设计报告聊天室.docx_第17页
第17页 / 共72页
java课程设计报告聊天室.docx_第18页
第18页 / 共72页
java课程设计报告聊天室.docx_第19页
第19页 / 共72页
java课程设计报告聊天室.docx_第20页
第20页 / 共72页
亲,该文档总共72页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

java课程设计报告聊天室.docx

《java课程设计报告聊天室.docx》由会员分享,可在线阅读,更多相关《java课程设计报告聊天室.docx(72页珍藏版)》请在冰点文库上搜索。

java课程设计报告聊天室.docx

java课程设计报告聊天室

 

JAVA程序设计

课程设计报告

 

班级:

(4号楷体)

学号:

(4号楷体)

姓名:

(4号楷体)

指导教师:

(4号楷体)

 

完成日期:

2009年9月(4号楷体)

一:

题目内容的描述

本文围绕Java编程语言在网络编程方面的具体应用,论述了使用面向对象方法,对计算器程序进行需求分析、概要设计、详细设计,最后使用Java编程实现的全过程。

在编程我们使用的java语言,是目前比较流行的编程语言。

在当今这个网络的时代,java语言在网络编程方面的优势使得网络编程有了更好的选择。

Java语言最大的特点是具有跨平台性,使其不受平台不同的影响,得到了广泛的应用。

二:

需求分析

1.1开发背景:

在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个局域网的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识.

1.1功能要求:

(1)登录功能.

(2)客户可以通过服务器转发,实现一对一和多对多聊天.

(3)实现呼叫功能.

(4)客户端程序应该可以实时显示目前其它用户的状态.

三:

主要模块的算法描述

聊天室服务器端设计:

 

 

 

聊天室客户端设计:

 

 

四:

详细设计

⏹聊天室服务器端设计:

聊天室服务端主要包括7个文件,它们的功能如下:

(1)ChatServer.java:

包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加事件侦听与事件处理。

调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端的消息的收发。

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

importjavax.swing.event.*;

import.*;

importjava.io.*;

/*

*聊天服务端的主框架类

*/

publicclassChatServerextendsJFrameimplementsActionListener{

publicstaticintport=8888;//服务端的侦听端口

ServerSocketserverSocket;//服务端Socket

Imageicon;//程序图标

JComboBoxcombobox;//选择发送消息的接受者

JTextAreamessageShow;//服务端的信息显示

JScrollPanemessageScrollPane;//信息显示的滚动条

JTextFieldshowStatus;//显示用户连接状态

JLabelsendToLabel,messageLabel;

JTextFieldsysMessage;//服务端消息的发送

JButtonsysMessageButton;//服务端消息的发送按钮

UserLinkListuserLinkList;//用户链表

//建立菜单栏

JMenuBarjMenuBar=newJMenuBar();

//建立菜单组

JMenuserviceMenu=newJMenu("服务(V)");

//建立菜单项

JMenuItemportItem=newJMenuItem("端口设置(P)",newImageIcon("face/98.gif"));

JMenuItemstartItem=newJMenuItem("启动服务(S)",newImageIcon("face/icon.gif"));

JMenuItemstopItem=newJMenuItem("停止服务(T)",newImageIcon("face/Uabrand.gif"));

JMenuItemexitItem=newJMenuItem("退出(X)",newImageIcon("face/messenger_big.gif"));

JMenuhelpMenu=newJMenu("帮助(H)");

JMenuItemhelpItem=newJMenuItem("帮助(H)",newImageIcon("face/HelpCenter.gif"));

//建立工具栏

JToolBartoolBar=newJToolBar();

//建立工具栏中的按钮组件

JButtonportSet;//启动服务端侦听

JButtonstartServer;//启动服务端侦听

JButtonstopServer;//关闭服务端侦听

JButtonexitButton;//退出按钮

//框架的大小

DimensionfaceSize=newDimension(400,600);

ServerListenlistenThread;

JPaneldownPanel;

GridBagLayoutgirdBag;

GridBagConstraintsgirdBagCon;

/**

*服务端构造函数

*/

publicChatServer(){

init();//初始化程序

//添加框架的关闭事件处理

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.pack();

//设置框架的大小

this.setSize(faceSize);

this.setVisible(true);

//设置运行时窗口的位置

DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();

this.setLocation((int)(screenSize.width-faceSize.getWidth())/2,

(int)(screenSize.height-faceSize.getHeight())/2);

this.setResizable(false);

this.setTitle("聊天室服务端");//设置标题

//为服务菜单栏设置热键'V'

serviceMenu.setMnemonic('V');

//为端口设置快捷键为ctrl+p

portItem.setMnemonic('P');

portItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));

//为启动服务快捷键为ctrl+s

startItem.setMnemonic('S');

startItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));

//为端口设置快捷键为ctrl+T

stopItem.setMnemonic('T');

stopItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK));

//为退出设置快捷键为ctrl+x

exitItem.setMnemonic('X');

exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));

//为帮助菜单栏设置热键'H'

helpMenu.setMnemonic('H');

//为帮助设置快捷键为ctrl+p

helpItem.setMnemonic('H');

helpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK));

}

/**

*程序初始化函数

*/

publicvoidinit(){

ContainercontentPane=getContentPane();

contentPane.setLayout(newBorderLayout());

//添加菜单栏

serviceMenu.add(portItem);

serviceMenu.add(startItem);

serviceMenu.addSeparator();

serviceMenu.add(stopItem);

serviceMenu.addSeparator();

serviceMenu.add(exitItem);

jMenuBar.add(serviceMenu);

helpMenu.add(helpItem);

jMenuBar.add(helpMenu);

setJMenuBar(jMenuBar);

//初始化按钮

portSet=newJButton("端口设置");

startServer=newJButton("启动服务");

stopServer=newJButton("停止服务");

exitButton=newJButton("退出");

//将按钮添加到工具栏

toolBar.add(portSet);

toolBar.addSeparator();//添加分隔栏

toolBar.add(startServer);

toolBar.add(stopServer);

toolBar.addSeparator();//添加分隔栏

toolBar.add(exitButton);

contentPane.add(toolBar,BorderLayout.NORTH);

//初始时,令停止服务按钮不可用

stopServer.setEnabled(false);

stopItem.setEnabled(false);

//为菜单栏添加事件监听

portItem.addActionListener(this);

startItem.addActionListener(this);

stopItem.addActionListener(this);

exitItem.addActionListener(this);

helpItem.addActionListener(this);

//添加按钮的事件侦听

portSet.addActionListener(this);

startServer.addActionListener(this);

stopServer.addActionListener(this);

exitButton.addActionListener(this);

combobox=newJComboBox();

combobox.insertItemAt("所有人",0);

combobox.setSelectedIndex(0);

messageShow=newJTextArea();

messageShow.setEditable(false);

//添加滚动条

messageScrollPane=newJScrollPane(messageShow,

JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,

JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

messageScrollPane.setPreferredSize(newDimension(400,400));

messageScrollPane.revalidate();

showStatus=newJTextField(35);

showStatus.setEditable(false);

sysMessage=newJTextField(24);

sysMessage.setEnabled(false);

sysMessageButton=newJButton();

sysMessageButton.setText("发送");

//添加系统消息的事件侦听

sysMessage.addActionListener(this);

sysMessageButton.addActionListener(this);

sendToLabel=newJLabel("发送至:

");

messageLabel=newJLabel("发送消息:

");

downPanel=newJPanel();

girdBag=newGridBagLayout();

downPanel.setLayout(girdBag);

girdBagCon=newGridBagConstraints();

girdBagCon.gridx=0;

girdBagCon.gridy=0;

girdBagCon.gridwidth=3;

girdBagCon.gridheight=2;

girdBagCon.ipadx=5;

girdBagCon.ipady=5;

JLabelnone=newJLabel("");

girdBag.setConstraints(none,girdBagCon);

downPanel.add(none);

girdBagCon=newGridBagConstraints();

girdBagCon.gridx=0;

girdBagCon.gridy=2;

girdBagCon.insets=newInsets(1,0,0,0);

girdBagCon.ipadx=5;

girdBagCon.ipady=5;

girdBag.setConstraints(sendToLabel,girdBagCon);

downPanel.add(sendToLabel);

girdBagCon=newGridBagConstraints();

girdBagCon.gridx=1;

girdBagCon.gridy=2;

girdBagCon.anchor=GridBagConstraints.LINE_START;

girdBag.setConstraints(combobox,girdBagCon);

downPanel.add(combobox);

girdBagCon=newGridBagConstraints();

girdBagCon.gridx=0;

girdBagCon.gridy=3;

girdBag.setConstraints(messageLabel,girdBagCon);

downPanel.add(messageLabel);

girdBagCon=newGridBagConstraints();

girdBagCon.gridx=1;

girdBagCon.gridy=3;

girdBag.setConstraints(sysMessage,girdBagCon);

downPanel.add(sysMessage);

girdBagCon=newGridBagConstraints();

girdBagCon.gridx=2;

girdBagCon.gridy=3;

girdBag.setConstraints(sysMessageButton,girdBagCon);

downPanel.add(sysMessageButton);

girdBagCon=newGridBagConstraints();

girdBagCon.gridx=0;

girdBagCon.gridy=4;

girdBagCon.gridwidth=3;

girdBag.setConstraints(showStatus,girdBagCon);

downPanel.add(showStatus);

contentPane.add(messageScrollPane,BorderLayout.CENTER);

contentPane.add(downPanel,BorderLayout.SOUTH);

//关闭程序时的操作

this.addWindowListener(

newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

stopService();

System.exit(0);

}

}

);

}

/**

*事件处理

*/

publicvoidactionPerformed(ActionEvente){

Objectobj=e.getSource();

if(obj==startServer||obj==startItem){//启动服务端

startService();

}

elseif(obj==stopServer||obj==stopItem){//停止服务端

intj=JOptionPane.showConfirmDialog(

this,"真的停止服务吗?

","停止服务",

JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);

if(j==JOptionPane.YES_OPTION){

stopService();

}

}

elseif(obj==portSet||obj==portItem){//端口设置

//调出端口设置的对话框

PortConfportConf=newPortConf(this);

portConf.show();

}

elseif(obj==exitButton||obj==exitItem){//退出程序

intj=JOptionPane.showConfirmDialog(

this,"真的要退出吗?

","退出",

JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);

if(j==JOptionPane.YES_OPTION){

stopService();

System.exit(0);

}

}

elseif(obj==helpItem){//菜单栏中的帮助

//调出帮助对话框

HelphelpDialog=newHelp(this);

helpDialog.show();

}

elseif(obj==sysMessage||obj==sysMessageButton){//发送系统消息

sendSystemMessage();

}

}

/**

*启动服务端

*/

publicvoidstartService(){

try{

serverSocket=newServerSocket(port,10);

messageShow.append("服务端已经启动,在"+port+"端口侦听...\n");

startServer.setEnabled(false);

startItem.setEnabled(false);

portSet.setEnabled(false);

portItem.setEnabled(false);

stopServer.setEnabled(true);

stopItem.setEnabled(true);

sysMessage.setEnabled(true);

}

catch(Exceptione){

//System.out.println(e);

}

userLinkList=newUserLinkList();

listenThread=newServerListen(serverSocket,combobox,

messageShow,showStatus,userLinkList);

listenThread.start();

}

/**

*关闭服务端

*/

publicvoidstopService(){

try{

//向所有人发送服务器关闭的消息

sendStopToAll();

listenThread.isStop=true;

serverSocket.close();

intcount=userLinkList.getCount();

inti=0;

while(i

Nodenode=userLinkList.findUser(i);

node.input.close();

node.output.close();

node.socket.close();

i++;

}

stopServer.setEnabled(false);

stopItem.setEnabled(false);

startServer.setEnabled(true);

startItem.setEnabled(true);

portSet.setEnabled(true);

portItem.setEnabled(true);

sysMessage.setEnabled(false);

mes

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2