JAVA聊天工具设计报告Word下载.docx
- 文档编号:19683785
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:27
- 大小:137.98KB
JAVA聊天工具设计报告Word下载.docx
《JAVA聊天工具设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《JAVA聊天工具设计报告Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
功能:
将系统信息广播至各个客户端;
踢除用户:
服务器可以选择性删除在线的用户;
客户端模块:
登陆服务器
列出当前在线用户信息;
私聊和多人聊天的选择;
发言:
对输入的数据进行发送;
离开状态;
2.概要设计
2.1功能图
图1.程序功能图
3.详细设计
3.1类关系图
图2:
类关系图
3.2类设计图
3.2.1、类client
模块名称
Client
功能描述
启动客户端系统
接口与属性
SERNER:
int
Jfc
Peoplrlist
Ps
keyIn:
string
Frame():
void
userName:
Function:
启动客户端
InPut:
无
OutPut:
Return:
空
publicClient()
windowClosing(WindowEvente)
mouseClicked(MouseEvente)
voidcloseSocket()
退出时,关闭Socket
3.2.2、类RTFSend
RTFSend
信息发送
Bin
Bout
Socket
Run():
3.2.3、类RTFReceive
RTFReceive
信息接收
voidrun()
运行多线程
空
3.2.4、类Server
server
启动服务器端
voidmain(Stringargs[])
启动服务器端
server()
设置关闭socket
voidgonggao(inta,Strings)
Stringchakan(Stringname)
name/null
voiddel(Stringtmp)
3.2.5、类YeeKuMap
YeeKuMap
按钮事件的处理
Put():
getkeyByVALLE
actionPerformed(ActionEvente)
InPut:
3.2.6、类ServerThread
ServerThread
负责所有客户的接待
Br
PS
SS
运行该线程
3.2.7、类ClinetThread
ClinetThread
处理每一个连接上的客户
ClinetThread(Socketsc)
getRESTmeg()viod
StringgetLogName()
4.主要程序实现
客户端:
importjava.io.*;
import.*;
importjava.awt.*;
importjava.awt.List;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.*;
importjava.util.*;
publicclassClientextendsJFrameimplementsActionListener{
privatestaticfinalintSERVER_PORT=30000;
privateSocketsocket;
privatePrintStreamps;
privateBufferedReaderbrServer;
privateJFileChooserjfc;
privateStringkeyIn;
publicstaticDefaultListModellistModel=newDefaultListModel();
//ListModel对象
privatestaticJListpeopleList;
Buttonbutton1=newButton("
发送"
);
staticButtonbutton2=newButton("
私聊"
staticButtonbutton3=newButton("
发送文件"
staticJCheckBoxjcb=newJCheckBox("
StringuserName=null;
//JButtonsendflie=null;
staticTextAreatxtA1=newTextArea();
//staticListlist1=null;
staticTextAreatxtA2=newTextArea();
//JTextAreatxtA2=null;
publicvoidFrame(){
JFrameframe=newJFrame("
聊天窗口"
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Containerpane=frame.getContentPane();
pane.setLayout(null);
frame.setLocation(320,240);
frame.setSize(500,500);
frame.setVisible(true);
//TextAreatxtA1=newTextArea();
Client.txtA1.setBounds(10,10,370,300);
//TextAreaClient.txtA2=newTextArea();
Client.txtA2.setBounds(10,340,370,80);
/*Listlist2=newList();
list2.setBounds(400,10,90,300);
*/
peopleList=newJList(listModel);
peopleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//设置单选
JScrollPaneListScrollPane=newJScrollPane(peopleList);
Client.peopleList.setBounds(400,10,90,300);
//Listlist3=newList();
//list3.setBounds(400,340,90,120);
//Buttonbutton3=newButton("
button3.setBounds(405,350,50,20);
button3.addActionListener(this);
//Buttonbutton1=newButton("
jcb.setBounds(160,430,80,40);
//
button1.setBounds(240,440,30,20);
button1.addActionListener(this);
//Buttonbutton2=newButton("
button2.setBounds(300,440,30,20);
button2.addActionListener(this);
pane.add(txtA1);
pane.add(txtA2);
pane.add(peopleList);
//pane.add(list1);
//pane.add(list2);
//pane.add(list3);
pane.add(jcb);
pane.add(button1);
pane.add(button2);
pane.add(button3);
}
/*publicstaticvoidmain(String[]args){
Frameframe1=newFrame();
//
//Frameframe2=newFrame();
frame1.gost();
/*setVisible(true);
setBounds(400,100,600,500);
Containercon=getContentPane();
con.setVisible(true);
con.setLayout(newFlowLayout());
txtA1=newJTextArea(15,45);
listModel=newDefaultListModel();
peopleList=newJList(listModel);
txtA2=newJTextArea(5,45);
yesBt=newJButton("
确定发送"
yesBt.addActionListener(this);
cancelBt=newJButton("
cancelBt.addActionListener(this);
//fr.add(btnSend);
//fr.setSize(200,200);
//fr.setVisible(true);
//为发送按钮注册事件
add(newJLabel("
"
));
con.add(newJLabel("
聊天内容:
con.add(txtA1);
add(ListScrollPane,BorderLayout.EAST);
con.add(txtA2);
con.add(cancelBt);
con.add(yesBt);
//this.addWindowListener(this);
validate();
con.validate();
//server=SocketSever();
*/
publicvoidinit(Clientclient){
try
{
//初始化代表键盘的输入流
//keyIn=this.txtA2.getText();
//keyIn=newBufferedReader(newInputStreamReader(System.in));
//连接到服务器
socket=newSocket("
127.0.0.1"
SERVER_PORT);
//获取该Socket对应的输入流和输出流
ps=newPrintStream(socket.getOutputStream());
brServer=newBufferedReader(newInputStreamReader(socket.getInputStream()));
Stringtip="
;
//采用循环不断地弹出对话框要求输入用户名
while(true){
client.userName=JOptionPane.showInputDialog(tip+"
输入用户名"
//将用户输入的用户名的前后增加协议字符串后发送
ps.println(YeekuProtocol.USER_ROUND+userName+YeekuProtocol.USER_ROUND);
//读取服务器的响应
Stringresult=brServer.readLine();
//如果用户重复,开始下次循环
/*if(result.equals(userName)){
Client.listModel.addElement(userName);
}*/
if(result.equals(YeekuProtocol.NAME_REP)){
tip="
用户名重复!
请重新"
continue;
}
//如果服务器返回登录成功,结束循环
if(result.equals(YeekuProtocol.LOGIN_SUCCESS)){
client.Frame();
//Client.listModel.addElement(userName);
break;
}
}
//捕捉到异常,关闭网络资源,并退出该程序
catch(UnknownHostExceptionex){
System.out.println("
找不到远程服务器,请确定服务器已经启动!
closeRs();
System.exit
(1);
}catch(IOExceptionex){
网络异常!
请重新登录!
//以该Socket对应的输入流启动ClientThread线程
newClientThread(brServer).start();
//定义一个读取键盘输出,并向网络发送的方法
/*privatevoidreadAndSend(StringkeyIn){
//try{
//不断读取键盘输入
Stringline=null;
while((line=keyIn)!
=null)
{
//如果发送的信息中有冒号,且以//开头,则认为想发送私聊信息
if(line.indexOf("
:
)>
0&
&
line.startsWith("
//"
)){
line=line.substring
(2);
ps.println(YeekuProtocol.PRIVATE_ROUND+
line.split("
)[0]+
YeekuProtocol.SPLIT_SIGN+
)[1]+
YeekuProtocol.PRIVATE_ROUND);
}elseif(line.equals("
byebye"
System.out.println("
aaaaaaaaaaaaabbbbbbbbbbbbbbbb"
+ps);
Stringkey=(String)Server.clients.getKeyByValue(ps);
aaaaaaaaaaaaa"
+key);
ps.println(YeekuProtocol.LOGIN_OUT+key+YeekuProtocol.LOGIN_OUT);
}else{
ps.println(YeekuProtocol.MSG_ROUND+line+YeekuProtocol.MSG_ROUND);
//}
//catch(IOExceptionex){
网络通信异常!
//}*/
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
if(e.getSource()==button1){
Stringline=Client.txtA2.getText();
while(line!
//Stringusername=null;
Stringname=null;
if(jcb.isSelected()&
Client.peopleList.getSelectedValue()!
=null){
name=(String)Client.peopleList.getSelectedValue();
//line=line.substring
(2);
//Stringsiliao=YeekuProtocol.PRIVATE_ROUND+
//userName+YeekuProtocol.SPLIT_SIGN+name+
//YeekuProtocol.SPLIT_SIGN+
//line+YeekuProtocol.PRIVATE_ROUND;
//System.out.println(siliao+"
这是客户端发送的"
//ps.println(siliao);
Client.txtA2.setText(null);
/*if(line.indexOf("
Stringkey=(String)Server.clients.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 聊天工具 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)