计算机网络课设报告聊天室.docx
- 文档编号:5685266
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:42
- 大小:164.51KB
计算机网络课设报告聊天室.docx
《计算机网络课设报告聊天室.docx》由会员分享,可在线阅读,更多相关《计算机网络课设报告聊天室.docx(42页珍藏版)》请在冰豆网上搜索。
计算机网络课设报告聊天室
中南大学
计算机网络课程设计报告
学院:
信息科学与工程学院
专业班级:
指导老师:
刘嫔
姓名:
学号:
完成时间:
2014.11.11
1、课题描述:
1.1、设计目的:
1.2、设计思路:
2、需求分析:
2.1、设计前提:
3、详细设计:
3.1、客户端设计:
3.1.1、Login.java:
3.1.2、Backpanel:
3.1.3、ChatClient.java:
3.1.4、ClientReceive.java:
3.2、服务端设计:
3.2.1、ChatServer.java:
3.2.2、ServerListen.java:
3.2.3、ServerReceive.java:
3.2.4、Node.java:
3.2.5、UserLinkList.java:
4、运行结果:
5、心得体会:
6、参考文献:
一、课题描述:
1.1、设计目的:
聊天室软件的设计与开发:
基本要求可以完成群聊、私人聊天,实时发送和显示聊天信息,完成好友列表;进一步要求带表情,附件发送,聊天信息的加密传送,设置黑名单等。
设计提示—学习通信编程Socket接口编程,使用TCP或UDP接口完成信息传送,利用多线程技术实现服务器端的多个TCP连接的建立。
1.2、设计思路:
Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。
Java的语言功能很精炼,并增加了一些很有用的功能,如自动收集碎片。
而且,Java很小,不需要占用多大内存。
因此运用JAVA程序编写聊天室,实现简单聊天功能。
本次课程设计做的是Java简单聊天室,它是图形界面、线程、流与文件等技术的综合应用。
程序实现了聊天室的基本功能,其流程有:
实现网络的连接,为聊天室网络
的建立做准备。
编辑个人信息,设置网络端口等
为用户聊天提供平台
客户退出聊天室
断开与网络的连接,彻底推出聊天室
二、需求分析:
2.1、设计前提:
在当今的信息时代,越来越多的聊天工具被应用,Java语言是当今流行的网络编程语言,它具有面向对象、与平台无关、安全、多线程等特点。
为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼我们熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。
三、详细设计:
3.1、客户端设计:
3.1.1、Login.java:
packageshuang;
importjava.awt.*;
importjavax.swing.*;
importcom.sun.java.swing.plaf.motif.MotifBorders.BevelBorder;
importjava.awt.event.*;
publicclassLoginextendsJFrameimplementsActionListener{
JPaneljp1;
JLabeljlb1,jlb2;
JPaneljp2;
JTextFieldjtf;
JPaneljp3;
JPasswordFieldjpf;
JButtonlogin,reset;
JPaneljp;
JPanelbackPanel;
publicLogin(){
jp1=newJPanel();
jp2=newJPanel();
jlb1=newJLabel("用户名:
");
jlb2=newJLabel("密码:
");
jtf=newJTextField(16);
jtf.setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
jpf=newJPasswordField(16);
jpf.setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
jp1.add(jlb1);
jp1.add(jtf);
jp2.add(jlb2);
jp2.add(jpf);
jp3=newJPanel();
login=newJButton("登陆");
login.setCursor(newCursor(Cursor.HAND_CURSOR));
login.addActionListener(this);
reset=newJButton("重置");
reset.setCursor(newCursor(Cursor.HAND_CURSOR));
jp3.add(login);
jp3.add(reset);
jp=newJPanel();
jp.setLayout(newGridLayout(3,1));
jp.add(jp1);
jp.add(jp2);
jp.add(jp3);
jp1.setOpaque(false);
jp2.setOpaque(false);
jp3.setOpaque(false);
jp.setOpaque(false);
backPanel=newBackPanel(newImageIcon("image/beijing.png").getImage());
backPanel.add(jp);
this.add(backPanel);
this.setTitle("聊天登录系统");
this.setLocation(400,200);
this.setSize(320,150);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==login){
StringuserName=jtf.getText();
Stringpassword=newString(jpf.getPassword());
if(password.equals("000000")){
this.dispose();
ChatClientclient=newChatClient(userName);
client.Connect();
}
}elseif(e.getSource()==reset){
jtf.setText("");
jpf.setText("");
}
}
publicstaticvoidmain(String[]args){
newLogin();
}
}
3.1.2、BackPanel.java:
packageshuang;
importjava.awt.*;
importjavax.swing.*;
publicclassBackPanelextendsJPanel{
Imageimage;
publicBackPanel(Imageimage){
this.image=image;
}
protectedvoidpaintComponent(Graphicsg){
super.paintComponent(g);
g.drawImage(image,0,0,this.getWidth(),this.getHeight(),this);
}
}
3.1.3、ChatClient.java:
packageshuang;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.io.*;
import.*;
/*
*聊天客户端的主框架类
*/
publicclassChatClientextendsJFrameimplementsActionListener{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
Stringip="127.0.0.1";//连接到服务端的ip地址
intport=8888;//连接到服务端的端口号
StringuserName;//用户名
inttype=0;//0表示未连接,1表示已连接
JComboBoxcombobox;//选择发送消息的接受者
JTextAreamessageShow;//客户端的信息显示
JScrollPanemessageScrollPane;//信息显示的滚动条
JLabelexpress,sendToLabel,messageLabel;
JTextFieldclientMessage;//客户端消息的发送
JButtonclientMessageButton;//发送消息
JTextFieldshowStatus;//显示用户连接状态
Socketsocket;
ObjectOutputStreamoutput;//网络套接字输出流
ObjectInputStreaminput;//网络套接字输入流
ClientReceiverecvThread;
//框架的大小
DimensionfaceSize=newDimension(400,400);
JPaneldownPanel;
GridBagLayoutgirdBag;
GridBagConstraintsgirdBagCon;
publicChatClient(StringuserName){
this.userName=userName;
init();//初始化程序
//添加框架的关闭事件处理
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
//设置框架的大小
this.setSize(faceSize);
this.setVisible(true);
setIconImage(getToolkit().getImage("face/love.gif"));
//设置运行时窗口的位置
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((int)(screenSize.width-faceSize.getWidth())/2,
(int)(screenSize.height-faceSize.getHeight())/2);
this.setResizable(false);
this.setTitle(userName+"的聊天室");//设置标题
}
/**
*程序初始化函数
*/
publicvoidinit(){
ContainercontentPane=getContentPane();
contentPane.setLayout(newBorderLayout());
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();
clientMessage=newJTextField(23);
clientMessage.setEnabled(false);
clientMessageButton=newJButton();
clientMessageButton.setText("发送");
//添加系统消息的事件侦听
clientMessage.addActionListener(this);
clientMessageButton.addActionListener(this);
sendToLabel=newJLabel("发送至:
");
messageLabel=newJLabel("发送消息:
");
downPanel=newJPanel();
girdBag=newGridBagLayout();
downPanel.setLayout(girdBag);
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=0;
girdBagCon.gridy=0;
girdBagCon.gridwidth=5;
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);
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=2;
girdBagCon.gridy=2;
girdBagCon.anchor=GridBagConstraints.LINE_END;
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=3;
girdBagCon.gridy=2;
girdBagCon.anchor=GridBagConstraints.LINE_START;
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=4;
girdBagCon.gridy=2;
girdBagCon.insets=newInsets(1,0,0,0);
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=0;
girdBagCon.gridy=3;
girdBag.setConstraints(messageLabel,girdBagCon);
downPanel.add(messageLabel);
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=1;
girdBagCon.gridy=3;
girdBagCon.gridwidth=3;
girdBagCon.gridheight=1;
girdBag.setConstraints(clientMessage,girdBagCon);
downPanel.add(clientMessage);
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=4;
girdBagCon.gridy=3;
girdBag.setConstraints(clientMessageButton,girdBagCon);
downPanel.add(clientMessageButton);
showStatus=newJTextField(35);
showStatus.setEditable(false);
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=0;
girdBagCon.gridy=5;
girdBagCon.gridwidth=5;
girdBag.setConstraints(showStatus,girdBagCon);
downPanel.add(showStatus);
contentPane.add(messageScrollPane,BorderLayout.CENTER);
contentPane.add(downPanel,BorderLayout.SOUTH);
//关闭程序时的操作
this.addWindowListener(
newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
if(type==1){
DisConnect();
}
System.exit(0);
}
});
}
/**
*事件处理
*/
publicvoidactionPerformed(ActionEvente){
Objectobj=e.getSource();
if(obj==clientMessage||obj==clientMessageButton){//发送消息
SendMessage();
clientMessage.setText("");
}
}
publicvoidConnect(){
try{
socket=newSocket(ip,port);
}
catch(Exceptione){
JOptionPane.showConfirmDialog(
this,"不能连接到指定的服务器。
\n请确认连接设置是否正确。
","提示",
JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);
return;
}
try{
output=newObjectOutputStream(socket.getOutputStream());
output.flush();
input=newObjectInputStream(socket.getInputStream());
output.writeObject(userName);
output.flush();
recvThread=newClientReceive(socket,output,input,combobox,messageShow,showStatus);
recvThread.start();
clientMessage.setEnabled(true);
messageShow.append("连接服务器"+ip+":
"+port+"成功...\n");
type=1;//标志位设为已连接
}
catch(Exceptione){
System.out.println(e);
return;
}
}
publicvoidDisConnect(){
clientMessage.setEnabled(false);
if(socket.isClosed()){
return;
}
try{
output.writeObject("用户下线");
output.flush();
input.close();
output.close();
socket.close();
messageShow.append("已经与服务器断开连接...\n");
type=0;//标志位设为未连接
}
catch(Exceptione){
}
}
publicvoidSendMessage(){
StringtoSomebody=combobox.getSelectedItem().toString();
Stringsta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 报告 聊天室