JAVA聊天程序实验报告.docx

上传人:b****6 文档编号:4809326 上传时间:2022-12-09 格式:DOCX 页数:41 大小:3.36MB
下载 相关 举报
JAVA聊天程序实验报告.docx_第1页
第1页 / 共41页
JAVA聊天程序实验报告.docx_第2页
第2页 / 共41页
JAVA聊天程序实验报告.docx_第3页
第3页 / 共41页
JAVA聊天程序实验报告.docx_第4页
第4页 / 共41页
JAVA聊天程序实验报告.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

JAVA聊天程序实验报告.docx

《JAVA聊天程序实验报告.docx》由会员分享,可在线阅读,更多相关《JAVA聊天程序实验报告.docx(41页珍藏版)》请在冰豆网上搜索。

JAVA聊天程序实验报告.docx

JAVA聊天程序实验报告

网络聊天程序实验报告

组长:

xxxPB09210xxx

其他组员:

实验内容

用面向对象程序设计方法编写一个网络聊天程序。

程序的功能是允许处在网络上不同结点的多个用户进行文字聊天。

最基本的要求是实现一对一的聊天,即最多只允许两个人在线。

也可以实现多人同时聊天,即在线的任何一个用户输入的文字,其他的人都能立即收到。

建议采用 Socket通讯方式。

实验实现

(1)概要设计:

GAGA聊天程序实现结构图:

 

........

.......

 

注:

图中粗箭头表示信息传递

 图解:

在客户端着一端:

每一个客户端登录时候,先向服务器发送一个登录名的信息,向服务器注册这个客户端,然后进入群聊窗口,可以直接在群聊窗口中发送群聊的信息,也可以点击在线用户,打开私聊窗口,向相应用户私聊。

群聊,私聊的消息发送给服务器,服务器再把这些消息广播给所有客户端,每个客户端对接受的消息进行识别:

要是群聊消息则放到群聊窗口里面;要是私聊信息,检查是不是给自己的私聊信息,要是给自己的,显示到相应私聊窗口上,要是没有相应私聊窗口则创建那个私聊窗口;要是不是自己的私聊消息则无视这个消息

在服务器这一端:

每一个客户端与服务器建立连接时候,就为它建立一个CreatServerThread的线程类,用来专门处理这个客户端。

服务器每当接收到消息后就使用Broadcast线程类进行广播,直到消息列表里面的消息发送完为止。

Broadcast是通过查找CreatServerThread线程类的数组,找到每个CreatServerThread线程类,也就找到每个客户端,再逐个发送消息

 

(2)详细设计:

实验实现代码结构

客户端:

(每种颜色代表一个类)

packageClient;

//主类message_frame,用来创建message_frame_to类

publicclassmessage_frame

{

publicstaticvoidmain(Stringargs[])

{//主函数,创建message_frame_to类,调用其构造函数

message_frame_tom=newmessage_frame_to();

}

}//主类message_frame结束

 

//类message_frame_to,用于创建客户端群聊窗口,与服务器连接,接发消息

classmessage_frame_toextendsKeyAdapterimplementsActionListener

{

publicmessage_frame_to()

{//构造函数,调用其他函数

Frame();//建立主框架

Text();//建立文本域

Label();//建立标签域

Button();//建立按钮域

online_users();//建立在线用户列表

DlogD=newDlog();//建立登陆界面

Client();//连接服务器函数

}

//建立主框架函数

publicstaticvoidFrame()

{}

//文本域函数

publicstaticvoidText()

{}

//标签域函数

publicstaticvoidLabel()

{}

//按钮函数

publicvoidButton()

{}

//按钮监听函数

publicvoidactionPerformed(ActionEvente)

{}

//输入框键盘监听函数,支持CTRL+ENTER快捷键发送消息

publicvoidkeyReleased(KeyEvente)

{}

//在线列表函数

publicvoidonline_users()

{}

//服务器建立连接与接收数据函数

publicintClient()

{}

//群聊信息发送函数

publicvoidsend()

{}

//延迟函数,用来解决需要延迟执行问题

publicstaticvoiddeley(intms)

{}

//抖屏函数

publicvoidshake()

{}

}//类message_frame_to结束

 

//私聊窗口类(线程派生类),每点击一个用户进行私聊时候,就创建一个对应的私聊窗口

classframeextendsThreadimplementsActionListener

{

//构造函数

publicframe(Strings)

{

send_name=s;

start();

}//构造函数结束

//run函数,用来构造私聊窗口

publicvoidrun()

{}

//私聊窗口按钮监听执行器函数

publicvoidactionPerformed(ActionEvente)

{}

//私聊消息发送函数

publicvoidsend_one()

{}

//私聊窗口信息显示函数

publicvoidwrite(Stringinn)

{}

}//私聊窗口类结束

 

//登录界面类,用来构造登录界面

classDlogextendsFrameimplementsActionListener

{

//构造函数,创建登录窗口界面

publicDlog()

{}

//登录窗口按钮监听执行器函数

publicvoidactionPerformed(ActionEvente)

{}

}//登录界面类结束

 

//音乐播放类,可以播放wav格式音乐

classPlayWav

{

//构造函数

publicPlayWav(Stringsoun)

{}

//播放函数

publicvoidplay()

{}

}//音乐播放类结束

 

服务器:

(Server为最大类,内部包含两个子类以用不同颜色表明)

packageServer;

//主类Server,是整个服务器的类

publicclassServerextendsServerSocketimplementsActionListener

{

//主函数

publicstaticvoidmain(String[]args)throwsIOException

{

newServer();//调用Server构造函数

}

//Sever函数,用来监听客户端连接

publicServer()throwsIOException

{}

//服务器的界面设计window函数

publicvoidwindow()

{}

//服务器GUI上按钮监听执行器函数

publicvoidactionPerformed(ActionEvente)

{}

//广播类(线程派生类),用来广播消息

classBroadcastextendsThread

{

publicBroadcast()

{

start();

}

//run函数,广播消息

publicvoidrun()

{}

}//广播类结束

//客户端线程类,每个对应一个客户端

classCreateServerThreadextendsThread

{

//构造函数

publicCreateServerThread(Sockets)throwsIOException

{}

//负责接收客户端发来的消息

publicvoidrun()

{}

publicvoidsendMessage(Stringmsg)

{//发送消息函数,保证发送给这个线程对应的客户端}

}//线程类CreateServerThread结束

}//主类Server结束

 

程序运行与使用说明

(1)打开服务器

运行Server.java,输入密码0911001,按下start按钮,文本域会出现红色的"TheServerisworking"字符串,表示服务器已经开始工作,要是密码输入不正确会提示"Thepasswordiswrong",重新输入正确的密码才能打开服务器,具体截图如下:

 

(2)登入客户端

运行message_frame.java,首先会跳出登录界面,输入用户名,点击sure按钮登录:

登录之后就会进入主聊天窗口,它可以支持群聊,可以看到主窗口分为:

输入框InputArea,信息框MessageArea,当前客户端用户名User,在线用户名列表OnlineUser,发送按钮Send,信息框清屏按钮Clear,抖屏按钮Shake

群聊:

在输入框中输入“你们好,我是卡卡”,按CTRL+ENTER键直接发送(也可以按Send按钮发送)

 

继续群聊:

私聊:

比如现在“卡卡”找“劳尔”私聊,可以直接点击主窗口在线列表里面的“劳尔”的名字,会弹出私聊窗口

在私聊窗口输入信息,点击发送即可和“劳尔”私聊,此时劳尔也会跳出一个对“卡卡”的私聊窗口

“劳尔”也可以对“卡卡”进行私聊

然后在用户退出时候会有在线列表更新,例如“罗比尼奥”退出:

 

注:

在用户登入,退出时候都会有提示音提醒在线的所有用户,在用户有消息到来时候会有消息提示音

 

软件特色:

GAGA聊天软件,支持群聊,私聊;支持CTRL+ENTER快捷键发送(群聊);支持清屏,抖屏功能 ; 界面清新 ;服务器管理便捷 ; 使用方便等许多优点

  

实验总结:

本次的上机作业,收获颇大,以前对面向对象语言只是只懂语法,没有接受太多的编程训练,这个实验代码量较大,很好的训练的面向对象编程方式的能力,也自己摸索了很多过去没有去看得东西,比如Java的音乐播放,socket聊天这些之前不太了解的东西 另外在GUI设计上面也是花了很多功夫,界面布局,各种功能器件的使用诸如此类的东西,总之,通过这次实验学习了很多新东西,也锻炼了很多老知识

 

代码:

/*客户端程序:

message_frame.java

*创建者:

xxxPB09210xxx

*创建时间:

2011年11月26日

*联系方式:

xxx

*版本信息:

version2.0

**/

packageClient;

 

importjava.awt.*;

importjavax.swing.ImageIcon;

importjava.awt.event.*;

importjavax.swing.*;

importjavax.swing.event.ListSelectionEvent;

importjavax.swing.event.ListSelectionListener;

import.*;

importjava.io.*;

importjava.util.*;

importjavax.sound.sampled.AudioFormat;

importjavax.sound.sampled.AudioInputStream;

importjavax.sound.sampled.AudioSystem;

importjavax.sound.sampled.DataLine;

importjavax.sound.sampled.SourceDataLine;

importjava.io.File;

importjava.awt.event.KeyAdapter;

importjava.awt.event.KeyEvent;

//主类message_frame

publicclassmessage_frame

{

publicstaticvoidmain(Stringargs[])

{//主函数,创建message_frame_to类,调用其构造函数

message_frame_tom=newmessage_frame_to();

}

}//主类message_frame结束

//***************************************************************************************************************************************************************************************

//**************************************************************类message_frame_to,用于创建客户端窗口,与服务器连接,接发消息********************************************

classmessage_frame_toextendsKeyAdapterimplementsActionListener

{

staticJFramef=newJFrame("GAGA2.0");

staticImageIconicon=newImageIcon("C:

\\scan5.jpg");//聊天窗口皮肤背景

staticpublicJLabelpanel=newJLabel(icon);

publicstaticJTextAreatext_input=newJTextArea();

publicstaticTextAreatext_message=newTextArea();

publicstaticLabellabel_4=newLabel("User:

");

Buttonb=newButton("Send");

Buttonbc=newButton("Clear");

Buttonbl=newButton("Shake");

publicstaticDefaultListModellistModel=newDefaultListModel();

publicstaticJListUser_List=newJList(listModel);//显示用户列表,支持私聊

publicstaticStringUserName=newString("");//当前客户端登陆账户

publicstaticSocketsocket;

publicstaticBufferedReaderin;

publicstaticPrintWriterout;

publicstaticArrayListframe_Threader=newArrayList();//私聊窗口列表

publicstaticCalendarnow;

//构造函数,调用其他所有函数

publicmessage_frame_to()

{

Frame();//建立主框架

Text();//建立文本域

Label();//建立标签域

Button();//建立按钮域

online_users();//建立在线用户列表

DlogD=newDlog();//建立登陆界面

Client();//连接服务器函数

}//构造函数结束

//建立主框架函数

publicstaticvoidFrame()

{

f.setLayout(null);

f.setBounds(300,200,600,500);

f.setBackground(Color.gray);

f.setResizable(false);

f.setVisible(false);

panel.setBounds(0,0,600,500);

f.add(panel);

f.addWindowListener

(newWindowAdapter()

{publicvoidwindowClosing(WindowEvente)//当点击关闭按钮时候,退出客户端

{

out.println("#");

System.exit(0);

}

}

);

}//主框架函数结束

//文本域函数

publicstaticvoidText()

{

text_input.setBounds(10,400,400,100);

text_input.setBackground(Color.white);

text_input.setVisible(true);

text_input.setFont(newFont("宋体",Font.BOLD,22));

text_input.setForeground(Color.blue);

text_message.setBounds(10,70,400,300);

text_message.setBackground(Color.white);

text_message.setVisible(true);

text_message.setFont(newFont("宋体",Font.BOLD,20));

text_message.setForeground(Color.blue);

text_message.setEditable(false);

text_message.selectAll();

panel.add(text_input);

panel.add(text_message);

}//文本域函数结束

//标签域函数

publicstaticvoidLabel()

{

Labellabel_1=newLabel("InputArea");

Labellabel_2=newLabel("MessageArea");

Labellabel_3=newLabel("OnlineUser");

label_1.setBounds(10,370,360,30);

label_1.setBackground(Color.gray);

label_1.setVisible(true);

label_1.setFont(newFont("黑体",Font.BOLD,20));

label_1.setForeground(Color.black);

label_2.setBounds(10,40,400,30);

label_2.setBackground(Color.gray);

label_2.setVisible(true);

label_2.setFont(newFont("黑体",Font.BOLD,16));

label_2.setForeground(Color.black);

label_3.setBounds(450,85,120,30);

label_3.setBackground(Color.gray);

label_3.setVisible(true);

label_3.setFont(newFont("黑体",Font.BOLD,16));

label_3.setForeground(Color.black);

label_4.setBounds(450,40,120,30);

label_4.setBackground(Color.gray);

label_4.setVisible(true);

label_4.setFont(newFont("黑体",Font.BOLD,12));

label_4.setForeground(Color.black);

panel.add(label_1);

panel.add(label_2);

panel.add(label_3);

panel.add(label_4);

}//标签域函数结束

//按钮函数

publicvoidButton()

{

b.setBounds(450,440,100,30);

b.setBackground(Color.LIGHT_GRAY);

b.setVisible(true);

b.setFont(newFont("隶书",Font.BOLD,20));

b.setForeground(Color.black);

panel.add(b);

b.addActionListener(this);

bc.setBounds(450,400,100,30);

bc.setBackground(Color.LIGHT_GRAY);

bc.setVisible(true);

bc.setFont(newFont("隶书",Font.BOLD,20));

bc.setForeground(Color.black);

panel.add(bc);

bc.addActionListener(this);

bl.setBounds(370,370,40,30);

bl.setBackground(Color.LIGHT_GRAY);

bl.setVisible(true);

bl.setFont(newFont("隶书",Font.BOLD,10));

bl.setForeground(Color.black);

panel.add(bl);

bl.addActionListener(this);

text_input.addKeyListener(this);

}//按钮函数结束

//按钮监听函数

publicvoidactionPerformed(ActionEvente)

{

if(e.getSource()==b)

{

send();

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

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1