聊天室课程设计报告.docx

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

聊天室课程设计报告.docx

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

聊天室课程设计报告.docx

聊天室课程设计报告

 

西安郵電學院

网络课程设计设计报告

题目:

基于TCPSOCKET的JAVA聊天室

院系名称:

计算机学院

专业名称:

网络工程

班级:

学生姓名:

学号(8位):

指导教师:

设计起止时间:

2011年6月20日~2011年7月1日

 

第一章功能分析

1.1需求分析

人们日常生活中越来越多地使用聊天室这项应用来为自己的工作和学习服务。

一个操作简单,界面友好、运行稳定的聊天室对于小型局域网的用户可以起到很好的交流作用。

所谓聊天室就是一个可以让许多用户同时互相通信的网上园地,个人用户可以通过聊天室将自己融入整个主流社会中。

根据目前使用聊天室的用户需求显示,用户对于聊天室主要有以下几点要求:

(1).与聊天室成员一起聊天。

(2).可以与聊天室成员私聊。

(3).可以改变聊天内容风格。

(4).用户注册(含头像)、登录。

(5).服务器监控聊天内容。

(6).服务器过滤非法内容。

(7).服务器发送通知。

(8).服务器踢人。

(9).保存服务器日志。

(10).保存用户聊天信息。

该简易聊天室是为许多喜爱聊天的用户开发设计的,和许多大型的网络聊天室相比该小聊天室功能比较简单,但能实现基本的聊天功能,点对多、点对点聊天和基本的用户功能,登录、查看在线用户等。

1.2软件功能描述

(1)、户设置:

用户自定义自己的登录名,成功设置后,服务端能接收到新设置的用户名。

(2)、登录功能:

在服务端开启的情况下,用户可以以自己自定义或者默认的登录名和登录地址端口登录到客户端,并能在服务器端显示登录状态。

(3)、公聊:

用户可以与“所有人”聊天,在线用户可正常接收并正确显示公聊消。

(4)、私聊:

用在线用户和其他用户聊天。

记录对于聊天室的其他用户是不可见的。

(5)、聊天心情:

用户在聊天的过程中可以选择相应的心情来表达自己的情感。

(6)、系统消息:

服务端运行,为每一个用户都能接收服务器端发送的信息提示信息。

(7)、用户的状态.每一个客户端用户都可以实时看到目前其他在线用户的状态。

(8)、用户剔除:

用户可以被系统剔除,并重新登记登录名和地址。

(9)、用户退出:

用户可以在正常情况下退出聊天室。

(10)、服务端控制:

服务端开启的情况下,用户才能登陆成功和聊天;用户设置的地址端口也必须与服务端的侦听端口一致,否则不能登录。

第二章主要模块描述及流程图

2.1模块介绍

本聊天室分为聊天室服务端和聊天室客户端,服务端与客户端之间通过套接口Socket(TCP)连接。

在java中使用套接口相当简单,JavaAPI为处理套接口的通信提供了一个类.Socket,服务器采用多线程以满足多用户的请求,并通过创建一个AppSocket来监听来自客户的连接请求,默认IP地址为:

127.0.0.1默认端口为8888。

2.1.1服务端模块图

聊天室服务端

端口服务

启动服务

发送系统消息

停止服务

退出

服务器

消息显示

 

聊天室服务端模块图3-1-1

端口服务:

输入要侦听的端口,默认为8888。

启动服务:

启动服务器,并开始在设置的端口中侦听,客户端用户可以登录并聊天。

停止服务:

关闭服务器,侦听结束。

客户端用户不能再聊天。

发送系统消息:

服务器端给所有人或者个别用户发送消息。

消息显示:

可以显示所有用户的聊天记录,和上线、下线信息。

退出服务器:

退出程序,并停止服务。

2.1.2客户端模块图

 

用户设置:

用户可以设置自己的用户名进行聊天。

连接设置:

用户可以设置自己的服务器的IP,端口号,默认地址为:

127.0.0.1:

8888。

用户登录:

在聊天室服务端已开启的情况下,用户才能登录,之后才能开始聊天。

用户注销:

退出聊天,可以继续修改用户设置和连接设置。

发送和接收聊天信息:

用户可以用户发送信息,并能看送给自己或所有人的消息。

退出:

关闭所有聊天并退出客户端。

2.2流程图

聊天室服务器

端口服务

启动服务

聊天室客户端

用户设置

登录

连接设置

聊天

退出

设置侦听端口

默认端口:

8888

设置用户名

默认连接地址或用户名

设置IP地址和端口

2.3服务器客户端关系图

(1).聊天室服务器端设计:

 

2.3.1聊天室服务器端设计

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

(1)AppServer.java服务器端进行监听客户端进行服务器的启动,以及端客户进行处理用户退出。

(2)ServerFrame为服务器端管理界面,负责用户帐号信息保存和用户在线的状态和相关服务器端口的信息以及访问的方式。

(3)serverChat.java负责对用户信息的处理包括公聊和私聊的信息的发送以及将聊天信息的序列化对象填加到保存聊天信息的记事本中。

2.3.2聊天室客户端设计

ActionListener

ChatClient

-port:

publicstaticin

-serverSocket:

ServerSocket

-messageShow:

JTextArea

-userLinkList:

UserLinkList

-showStatus:

JTextField

+ChatClient():

public

+init():

publicvoid

+Connect():

publicvoid

+DisConnect():

publicvoid

+SendMessage():

publicvoid

JFrame

ClientReceive

-socket:

Socket

-output:

ObjectOutputStream

-input:

ObjectInputStream+ClientReceive(Socket,ObjectOutputStream,ObjectInputStream,JComboBox,JTextArea,JTextField)

Thread

 

聊天室客户端主要包括6个文件,其主要功能如下:

(1).ChatClient.java为客户端程序启动类,负责客户端的启动和退出。

(2).Login.java为客户端程序登录界面,负责用户帐号信息的验证与反馈。

(3).Register.java为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。

(4).ChatRoom.java为客户端程序聊天室主界面,负责接收、发送聊天内容与服务器端的Connection.java亲密合作。

(5).Windowclose为ChatRoom.java的内部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。

(6).Clock.java为客户端程序的一个小程序,实现的一个石英钟功能。

第三章主要程序代码和界面展示

3.1服务器端启动代码和界面

3.1.1服务器启动代码

publicclassAppServerextendsThread{

privateServerSocketserverSocket;

privateServerFramesFrame;

privatestaticVectoruserOnline=newVector(1,1);

privatestaticVectorv=newVector(1,1);

//创建服务器启动服务监听8888端口

publicAppServer(){

sFrame=newServerFrame();

try{

serverSocket=newServerSocket(8888);

//获取服务器的主机名和IP地址

InetAddressaddress=InetAddress.getLocalHost();

sFrame.txtServerName.setText(address.getHostName());

sFrame.txtIP.setText(address.getHostAddress());

sFrame.txtPort.setText("8888");

}catch(IOExceptione){

fail(e,"不能启动服务!

");}

sFrame.txtStatus.setText("已启动...");

this.start();//启动线程}

//退出服务器,退出消息

publicstaticvoidfail(Exceptione,Stringstr){

System.out.println(str+"。

"+e);}

//监听客户的请求,当有用户请求时创建Connection线程

publicvoidrun(){try{while(true){//监听并接受客户的请求

Socketclient=serverSocket.accept();

newConnection(sFrame,client,userOnline,v);//支持多线程

//System.out.println("userLength:

"+userLength);

}}atch(IOExceptione){

fail(e,"不能监听!

");}}

//服务器

publicstaticvoidmain(Stringargs[]){

newAppServer();}}

3.1.2服务器启动界面

服务器登录界面图4-1-2

3.2注册主要代码及界面

3.2.1注册主要代码

publicclassRegisterextendsJFrameimplementsActionListener{

privateJComboBoxcomboBox;

privatestaticfinallongserialVersionUID=9019746127517522180L;

JPanelpnlRegister;

JLabellblUserName,lblGender,lblAge;

JLabellblPassword,lblConfirmPass,lblEmail,logoPosition;

JTextFieldtxtUserName,txtAge,txtEmail;

JPasswordFieldpwdUserPassword,pwdConfirmPass;

JRadioButtonrbtnMale,rbtnFemale;

ButtonGroupbtngGender;

JButtonbtnOk,btnCancel,btnClear;

StringstrServerIp;

finalJLabelheadLabel=newJLabel();

//用于将窗口用于定位

Dimensionscrnsize;

Toolkittoolkit=Toolkit.getDefaultToolkit();

//构造方法

publicRegister(Stringip)

{super("[HappyChat]聊天室注册窗口");

strServerIp=ip;

pnlRegister=newJPanel();

this.getContentPane().add(pnlRegister);

lblUserName=newJLabel("用户名:

");

lblGender=newJLabel("性别:

");

lblAge=newJLabel("年龄:

");

lblPassword=newJLabel("密码:

");

lblConfirmPass=newJLabel("确认密码:

");

lblEmail=newJLabel("电子邮件:

");

txtUserName=newJTextField(30);

txtEmail=newJTextField(30);

txtAge=newJTextField(10);

pwdUserPassword=newJPasswordField(30);

pwdConfirmPass=newJPasswordField(30);

rbtnMale=newJRadioButton("男",true);

rbtnFemale=newJRadioButton("女");

btngGender=newButtonGroup();

btnOk=newJButton("确定(O)");

btnOk.setMnemonic('O');

btnOk.setToolTipText("保存注册信息");

btnCancel=newJButton("返回(B)");

btnCancel.setMnemonic('B');

btnCancel.setToolTipText("返回登录窗口");

btnClear=newJButton("清空(L)");

btnClear.setMnemonic('L');

btnClear.setToolTipText("清空注册信息");//按钮注册监听

btnOk.addActionListener(this);

btnCancel.addActionListener(this);

btnClear.addActionListener(this);

finalJLabellabel=newJLabel();

label.setText("头像:

");

label.setBounds(30,120,60,15);

pnlRegister.add(label);

comboBox=newJComboBox();

comboBox.setAutoscrolls(true);

comboBox.setModel(newDefaultComboBoxModel(newString[]{"1","2",}));

comboBox.setBounds(110,116,47,23);

comboBox.addItemListener(newItemListener(){

publicvoiditemStateChanged(ItemEventarg0){

Iconlogo=newImageIcon("face\\"+comboBox.getSelectedItem().toString()+".jpg");

//TODO自动生成方法存根

headLabel.setIcon(logo);}});

pnlRegister.add(comboBox);

headLabel.setHorizontalAlignment(SwingConstants.CENTER);

//.setIcon(SwingResourceManager.getIcon(Register.class,"face/1.jpg"));

headLabel.setIcon(newImageIcon("face//1.JPG"));

headLabel.setBounds(247,88,74,72);

pnlRegister.add(headLabel);

}//构造方法结束

//按钮监听响应

publicvoidactionPerformed(ActionEventae)

{Objectsource=newObject();

source=ae.getSource();

if(source.equals(btnOk))//"确定"按钮{

register();}

if(source.equals(btnCancel))//"返回"按钮{

newLogin();this.dispose();}

if(source.equals(btnClear))//"清空"按钮{

txtUserName.setText("");

pwdUserPassword.setText("");

pwdConfirmPass.setText("");

txtAge.setText("");

txtEmail.setText("");}

}//actionPerformed()结束

//////////"确定"按钮事件响应//////////

@SuppressWarnings({"deprecation","static-access"})

publicvoidregister(){//接受客户的详细资料

Register_Customerdata=newRegister_Customer();

data.custName=txtUserName.getText();

data.custPassword=pwdUserPassword.getText();

data.age=txtAge.getText();

data.sex=rbtnMale.isSelected()?

"男":

"女";

data.email=txtEmail.getText();

//chenmin

data.head=comboBox.getSelectedItem().toString();

//验证用户名是否为空

if(data.custName.length()==0){

JOptionPane.showMessageDialog(null,"用户名不能为空");return;}

//验证密码是否为空if(data.custPassword.length()==0){

JOptionPane.showMessageDialog(null,"密码不能为空");return}

//验证密码的一致性

if(!

data.custPassword.equals(pwdConfirmPass.getText())){

JOptionPane.showMessageDialog(null,"密码两次输入不一致,请重新输入");return;}//验证年龄是否为空

if(data.age.length()==0){

JOptionPane.showMessageDialog(null,"年龄不能为空");return;}

//验证年龄的合法性

intage=Integer.parseInt(txtAge.getText());

if(age<=0||age>100){JOptionPane.showMessageDialog(null,"年龄输入不合法");return;}//验证Email的正确性

intFound_flag=0;//判断标志

for(inti=0;i

if(data.email.charAt(i)=='@'){

Found_flag++;}}

if(Found_flag!

=1){JOptionPane.showMessageDialog(null,"电子邮箱格式不正确,请重新输入");return;}try{//连接到服务器SockettoServer;

toServer=newSocket(strServerIp,8888);

ObjectOutputStreamstreamToServer=newObjectOutputStream(toServer.getOutputStream());

//写客户详细资料到服务器socket

streamToServer.writeObject((Register_Customer)data);

//读来自服务器socket的登陆状态

BufferedReaderfromServer=newBufferedReader(newInputStreamReader(toServer.getInputStream()));

Stringstatus=fromServer.readLine();//显示成功消息

JOptionPaneop=newJOptionPane();

op.showMessageDialog(null,status);

if(status.equals(data.custName+"注册成功"))

{txtUserName.setText("");

pwdUserPassword.setText("");

pwdConfirmPass.setText("");

txtAge.setText("");

txtEmail.setText("");}//关闭流对象

streamToServer.close();

fromServer.close();}

catch(InvalidClassExceptione1){

JOptionPane.showMessageDialog(null,"类错误!

");}

catch(NotSerializableExceptione2){

JOptionPane.showMessageDialog(null,"对象未序列化!

");}

catch(IOExceptione3){

JOptionPane.showMessageDialog(null,"不能写入到指定服务器!

");}

}//方法register()结束

publicstaticvoidmain(Stringargs[]){newRegister("127.0.0.1");

}}//classRegister结束

3.2.2注册界面

3.3登录主要代码和界面

3.3.1登录代码

publicclassLoginextendsJFrameimplementsActionListener{

privatestaticfinallongserialVersionUID=-8965773902056088264L;

privateJPanelpnlLogin;

privateJButtonbtnLogin,btnRegister,btnExit;

privateJLabellblServer,lblUserName,lblPassword,lblLogo;

privateJTextFieldtxtUserName,txtServer;

privateJPasswordFieldpwdPassword;

privateString

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

当前位置:首页 > PPT模板 > 动物植物

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

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