首页 JAVA聊天工具设计报告

JAVA聊天工具设计报告

举报
开通vip

JAVA聊天工具设计报告JAVA聊天工具设计报告 目录 1. 需求分析 ………………………………………………………………………1 2. 概要设计 ……………………………………………………………………….2 2.1 功能图 …………………………………..……………………………………..2 3. 详细设计 ………………………………………………………………………2 3.1 类关系图 ………………………………………………………………………2 3.2 类设计图 ………………………………………………………………………3 3.2.1、类client...

JAVA聊天工具设计报告
JAVA聊天工具设计 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 目录 1. 需求分析 ………………………………………………………………………1 2. 概要设计 ……………………………………………………………………….2 2.1 功能图 …………………………………..……………………………………..2 3. 详细设计 ………………………………………………………………………2 3.1 类关系图 ………………………………………………………………………2 3.2 类设计图 ………………………………………………………………………3 3.2.1、类client …………………………………………………………………3 3.2.2、类RTFSend…………………………………………………………………4 3.2.3、类RTFReceive ……………………………………………………………4 3.2.4、类Server …………………………………………………………………5 3.2.5、类YeeKuMap ………………………………………………………………5 3.2.6、类ServerThread …………………………………………………………6 3.2.8、类ClinetThread …………………………………………………………6 4. 主要程序实现………………………………………………………………….7 5. 测试与结果 ………………………………………………………………….16 5.1功能模块界面 .……………………………………………………………….16 6. 心得 信息技术培训心得 下载关于七一讲话心得体会关于国企改革心得体会关于使用希沃白板的心得体会国培计划培训心得体会 体会 …………………………………………………………………….22 参考文献…………………………………………………………………………..23 嘉兴学院 Java综合实训报告 聊天小程序 1. 需求分析 聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客服机/服务器架构模式。通过Java提供的Socket类来连接客户机和服务器并使客户机与服务器之间相互通信。由于聊天是多点对多点的而Java提供的多线程功能,用多线程可完成多点对多点的聊天。 主要有两个应用程序,分别为服务器程序和客户端程序。服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 的显示和信息输入。采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。该聊天系统实现私聊,群聊,用户登陆,退出聊天系统等功能。 本系统的主要功能有以下几个部分组成: 服务器端模块: 系统信息的输入:可以输入任何信息; 功能:将系统信息广播至各个客户端; 踢除用户:服务器可以选择性删除在线的用户; 客户端模块: 登陆服务器 列出当前在线用户信息; 私聊和多人聊天的选择; 发言:对输入的数据进行发送; 离开状态; 1 嘉兴学院 Java综合实训报告 2. 概要设计 2.1 功能图 图1.程序功能图 3. 详细设计 3.1 类关系图 2 嘉兴学院 Java综合实训报告 RTFSend -bin : bin-bout-socket+socket()ClientThread+run() : void结束2-br结束1+ClientThread() : voidClient+getRealMsg() : string-SERNER : int+run() : void-jfc-keyIn : string1..11..1-listModelRTFReceive-peopleList-receiveServer-ps-socket-SERVER_PORT : int-socket+RTFReceive() : RTFReceive1..1-clients : int-userName : string+run() : void-kick1..1+Frame() : void-ss+actionPerformed() : void1..1+Server() : Server+closeRs() : void1..1+init() : void+init() : void+main() : void+main() : void1..11..11..11..1ServerThreadYeekumAP-br-ps+put() : void-socket+getKeyByVALUE()+ServerThreaad()+removeByValue() : void+getRealMsg() : string(idl)+run() : void 图2:类关系图 3.2 类设计图 3.2.1、类client 模块名称 Client 启动客户端系统 功能描述 SERNER:int Jfc 接口与属性 Peoplrlist Ps keyIn:string 3 嘉兴学院 Java综合实训报告 Frame():void userName:string Function:启动客户端 InPut: 无 OutPut: 无 Return:空 public Client() windowClosing(WindowEvent e) mouseClicked(MouseEvent e) InPut: OutPut: Return: void closeSocket() Function: 退出时,关闭 Socket 3.2.2、类RTFSend 模块名称 RTFSend 功能描述 信息发送 Bin Bout 接口与属性 Socket Socket Run():void 3.2.3、类RTFReceive 模块名称 RTFReceive 信息接收 功能描述 void run() Function: 运行多线程 接口与属性 InPut: 无 OutPut: 无 Return: 空 4 嘉兴学院 Java综合实训报告 3.2.4、类Server 模块名称 server 功能描述 启动服务器端 void main(String args[]) Function: 启动服务器端 接口与属性 InPut: 无 OutPut: 无 Return: 空 server() Function: InPut: 无 OutPut: 无 Return: 空 void closeSocket() Function: 设置关闭socket InPut: 无 OutPut: 无 Return: 空 void gonggao(int a,String s) Function: InPut: 无 OutPut: 无 Return: 空 String chakan(String name) Return: name/null void del(String tmp) Return: 空 3.2.5、类YeeKuMap 模块名称 YeeKuMap 功能描述 按钮事件的处理 Put():void getkeyByVALLE 接口与属性 actionPerformed(ActionEvent e) Function: InPut: OutPut: Return: 5 嘉兴学院 Java综合实训报告 3.2.6、类ServerThread 模块名称 ServerThread 功能描述 负责所有客户的接待 Br 接口与属性 PS SS void run() Function: 运行该线程 InPut: 无 OutPut: 无 Return:空 3.2.7、类ClinetThread 模块名称 ClinetThread 功能描述 处理每一个连接上的客户 ClinetThread(Socket sc) Br 接口与属性 getRESTmeg()viod InPut: 无 OutPut: 无 Return:空 String getLogName() InPut: 无 OutPut: 无 Return:空 void run() Function: 运行该线程 InPut: 无 OutPut: 无 Return:空 6 嘉兴学院 Java综合实训报告 4. 主要程序实现 客户端: import java.io.*; import java.net.*; import java.awt.*; import java.awt.List; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import java.util.*; public class Client extends JFrame implements ActionListener{ private static final int SERVER_PORT = 30000; private Socket socket; private PrintStream ps; private BufferedReader brServer; private JFileChooser jfc; private String keyIn; public static DefaultListModel listModel = new DefaultListModel(); // ListModel对象 private static JList peopleList; Button button1=new Button("发送"); static Button button2=new Button("私聊"); static Button button3=new Button("发送文件"); static JCheckBox jcb = new JCheckBox("私聊"); String userName = null; //JButton sendflie=null; static TextArea txtA1=new TextArea(); //static List list1 = null; static TextArea txtA2 = new TextArea(); //JTextArea txtA2=null; public void Frame(){ JFrame frame=new JFrame("客户端:聊天窗口"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container pane=frame.getContentPane(); pane.setLayout(null); frame.setLocation(320, 240); frame.setSize(500,500); frame.setVisible(true); 7 嘉兴学院 Java综合实训报告 // TextArea txtA1=new TextArea (); Client.txtA1.setBounds(10, 10, 370,300); //TextArea Client.txtA2=new TextArea(); Client.txtA2.setBounds(10, 340, 370, 80); /* List list2=new List(); list2.setBounds(400, 10,90,300);*/ peopleList = new JList(listModel); peopleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//设置单选 JScrollPane ListScrollPane = new JScrollPane(peopleList); Client.peopleList.setBounds(400, 10,90,300); // List list3=new List(); // list3.setBounds(400, 340, 90, 120); // Button button3=new Button("发送文件"); button3.setBounds(405,350,50,20); button3.addActionListener(this); // Button button1=new Button("发送"); jcb.setBounds(160, 430, 80, 40); // button1.setBounds(240,440,30,20); button1.addActionListener(this); // Button button2=new Button("私聊"); 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); } 8 嘉兴学院 Java综合实训报告 /*public static void main(String[] args) { Frame frame1=new Frame();// //Frame frame2=new Frame(); frame1.gost();*/ /*setVisible(true); setBounds(400,100,600,500); Container con= getContentPane(); con.setVisible(true); con.setLayout(new FlowLayout()); txtA1=new JTextArea(15,45); listModel = new DefaultListModel(); peopleList = new JList(listModel); peopleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//设置单选 JScrollPane ListScrollPane = new JScrollPane(peopleList); txtA2=new JTextArea(5,45); yesBt=new JButton("确定发送"); yesBt.addActionListener(this); cancelBt=new JButton("发送文件"); cancelBt.addActionListener(this); //fr.add(btnSend); // fr.setSize(200,200); //fr.setVisible(true); // 为发送按钮注册事件 cancelBt.addActionListener(this); add(new JLabel("客户端:")); con.add(new JLabel("聊天内容:")); con.add(txtA1); add(ListScrollPane, BorderLayout.EAST); con.add(txtA2); con.add(cancelBt); con.add(yesBt); // this.addWindowListener(this); validate(); con.validate(); //server=SocketSever(); */ public void init(Client client){ 9 嘉兴学院 Java综合实训报告 try { //初始化代表键盘的输入流 //keyIn = this.txtA2.getText(); //keyIn = new BufferedReader(new InputStreamReader(System.in)); //连接到服务器 socket = new Socket("127.0.0.1", SERVER_PORT); //获取该Socket对应的输入流和输出流 ps = new PrintStream(socket.getOutputStream()); brServer = new BufferedReader(new InputStreamReader(socket.getInputStream())); String tip = ""; //采用循环不断地弹出对话框要求输入用户名 while(true){ client.userName = JOptionPane.showInputDialog(tip + "输入用户名"); //将用户输入的用户名的前后增加 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 字符串后发送 ps.println(YeekuProtocol.USER_ROUND + userName+ YeekuProtocol.USER_ROUND); //读取服务器的响应 String result = 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; } } } //捕捉到异常,关闭网络资源,并退出该程序 10 嘉兴学院 Java综合实训报告 catch (UnknownHostException ex){ System.out.println("找不到远程服务器,请确定服务器已经启动~"); closeRs(); System.exit(1); }catch (IOException ex){ System.out.println("网络异常~请重新登录~"); closeRs(); System.exit(1); } //以该Socket对应的输入流启动ClientThread线程 new ClientThread(brServer).start(); } //定义一个读取键盘输出,并向网络发送的方法 /*private void readAndSend(String keyIn){ //try{ //不断读取键盘输入 String line = null; while((line = keyIn) != null) { //如果发送的信息中有冒号,且以//开头,则认为想发送私聊信息 if (line.indexOf(":") > 0 && line.startsWith("//")){ line = line.substring(2); ps.println(YeekuProtocol.PRIVATE_ROUND + line.split(":")[0] + tocol.SPLIT_SIGN + YeekuPro line.split(":")[1] + YeekuProtocol.PRIVATE_ROUND); }else if(line.equals("byebye")){ System.out.println("aaaaaaaaaaaaabbbbbbbbbbbbbbbb"+ps); String key = (String)Server.clients.getKeyByValue(ps); System.out.println("aaaaaaaaaaaaa"+key); ps.println(YeekuProtocol.LOGIN_OUT+key+YeekuProtocol.LOGIN_OUT); }else{ ps.println(YeekuProtocol.MSG_ROUND + line+ YeekuProtocol.MSG_ROUND); } } //} //捕捉到异常,关闭网络资源,并退出该程序 //catch (IOException ex){ System.out.println("网络通信异常~请重新登录~"); 11 嘉兴学院 Java综合实训报告 closeRs(); System.exit(1); } //}*/ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==button1){ String line = Client.txtA2.getText(); while(line != null) { // String username = null; String name = null; //如果发送的信息中有冒号,且以//开头,则认为想发送私聊信息 if ( jcb.isSelected() && Client.peopleList.getSelectedValue()!=null){ name = (String) Client.peopleList.getSelectedValue(); //line = line.substring(2); //String siliao = 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(":") > 0 && line.startsWith("//")){ line = line.substring(2); ps.println(YeekuProtocol.PRIVATE_ROUND + line.split(":")[0] + YeekuProtocol.SPLIT_SIGN + line.split(":")[1] + YeekuProtocol.PRIVATE_ROUND);*/ }else if(line.equals("byebye")){ System.out.println("aaaaaaaaaaaaabbbbbbbbbbbbbbbb"+ps); String key = (String)Server.clients.getKeyByValue(ps); System.out.println("aaaaaaaaaaaaa"+key); ps.println(YeekuProtocol.LOGIN_OUT+key+YeekuProtocol.LOGIN_OUT); }else{ ps.println(YeekuProtocol.MSG_ROUND + line+ 12 嘉兴学院 Java综合实训报告 YeekuProtocol.MSG_ROUND); //((TextComponent) Client.txtA2).setText(""); Client.txtA2.setText(null); break; } } } if(e.getSource()==Client.button3){ jfc.showOpenDialog(new Frame()); //启动新的线程传递文 件 RTFSend send = new RTFSend(jfc.getSelectedFile()); send.start(); } } //关闭Socket、输入流、输出流的方法 private void closeRs(){ //try{ if (keyIn != null) { ps.close(); } if (brServer != null) { ps.close(); } if (ps != null) { ps.close(); } /*if (socket != null) { //keyIn.close(); } }catch (IOException ex) { ex.printStackTrace(); }*/ } /*public void actionPerformed1 (ActionEvent e) { // 弹出文件选择对话框 if(e.getSource()==Client.button3){ jfc.showOpenDialog(new Frame()); //启动新的线程传递文 件 13 嘉兴学院 Java综合实训报告 RTFSend send = new RTFSend(jfc.getSelectedFile()); send.start(); }}*/ public static void main(String[] args){ Client client = new Client(); //client.Frame(); client.init(client); } } 服务器端: import java.net.*; import java.io.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Server extends JFrame { private static final int SERVER_PORT = 30000; public static DefaultListModel listModel; // ListModel对象 private JList peopleList; private JButton kick; private ServerSocket ss; //使用MyMap对象来保存每个客户名字和对应输出流之间的对应关系。 public static YeekuMap clients =new YeekuMap(); public Server(){ super("服务器"); setLayout(new BorderLayout()); listModel = new DefaultListModel(); peopleList = new JList(listModel); peopleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//设置单选 JScrollPane ListScrollPane = new JScrollPane(peopleList); add(ListScrollPane, BorderLayout.CENTER); kick = new JButton("踢人"); kick.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==kick){ 14 嘉兴学院 Java综合实训报告 String userName = (String)peopleList.getSelectedValue();// 从列表里得到用户选择的项 PrintStream ps = Server.clients.get(userName); ps.println(Server.clients.getKeyByValue(ps)+ "您已经被迫下线,请重新登录");//1.告知本人被迫下线 ps.flush(); ps.close();//2.关闭流 Server.clients.removeByValue(ps); for (PrintStream clientPs : Server.clients.valueSet()){ clientPs.println("用户"+userName+"已经下线。"); }//3.通知其他人 这个用户已经下线 listModel.removeElement(userName);//4.从列表中移除 for (PrintStream clientPs : Server.clients.valueSet()){ clientPs.println(YeekuProtocol.USER_REMOVE+userName+YeekuProtocol.USER_REM OVE); } } } }); //dataList.getSelectedValue(); add(kick, BorderLayout.SOUTH); ion(300, 100); setLocat setSize(150, 450); setResizable(false); //设置不能最大化 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true);//设置可不可见 } public void init(){ try{ //建立监听的ServerSocket ss = new ServerSocket(SERVER_PORT); //采用死循环来不断接受来自客户端的请求 while(true){ Socket socket = ss.accept(); new ServerThread(socket).start(); } } //如果抛出异常 catch(IOException ex){ System.out.println("服务器启动失败,是否端口" + SERVER_PORT + "已被 15 嘉兴学院 Java综合实训报告 占用,"); } //使用finally块来关闭资源 finally{ try{ if (ss != null){ ss.close(); } }catch (IOException ex){ ex.printStackTrace(); } System.exit(1); } } public static void main(String[] args){ Server server = new Server(); server.init(); } } 5. 测试与结果 5.1功能模块界面 服务器端界面: 16 嘉兴学院 Java综合实训报告 图3.服务器端界面 登陆界面: 图4.登陆界面 客户端界面: 17 嘉兴学院 Java综合实训报告 图5.输入用户名 图6.登陆客户端 登陆后的服务器: 18 嘉兴学院 Java综合实训报告 图7.用户登陆后的服务器 第2个客户端登陆: 图8.第2个用户登陆 19 嘉兴学院 Java综合实训报告 图9.可在客户端显示在线用户 踢除用户: 20 嘉兴学院 Java综合实训报告 图10.服务器端点击踢人 图11.客户端显示被迫下线 发送聊天: 21 嘉兴学院 Java综合实训报告 图12.在客户端输入字符点击发送 图13.在接收用户客户端显示出发送的字符 图14.在发送用户客户端显示发送的字符 6. 心得体会 经过一个学期的JAVA课程学习了解了JAVA的基础理论知识,通过这次程序设计,进一步巩固、加深了我们所学专业课程的基本理论知识,理论联系实际,进一步培养了综合分析问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,解决问题的能力,进一步加强了JAVA的实际应用能力。通过本次Java语言课程设计,我对面向对象的程序设计有了更深程度的掌握,它将重点放在对象与对象的接口上。在通过对题目进行需求分析,考虑一些编程中可能遇到的问题。其次开始界面设计、类的设计、类功能的连接等等实现。在遇到问题解决问题的过程中不断完善功能。这次Java课程设计不仅考查了对Java语言基本理论知识的学习程度还考核了我们综合运用以及学习新知识的能力。在以后的学习道路上必须多加强自己的实际业务能力,才能适应社会对应用型人才实际工作能力的需求。 22 嘉兴学院 Java综合实训报告 参考文献 [1] 夏宽理 .Java语言程序设计1. 机械工业出版社, 2008年4月. [2] 丁宝康 .数据库系统原理. 经济科学出版社,2007年. [3] 王建华,董志敏译,JAVA核心技术 卷2:高级特性,北京:机械工业出版社,2005 [4] 李建峰译,java2图形设计 卷二:swing.北京:机械工业出版社,2000 [5] 姬猛洛,李军译,即时消息传递系统编程源代码解析. 北京:电子工业出版社,2002 内部资料, 请勿外传~ 精品资料精品资料 精品资料 精品资料 精品资料 精品资料 23 嘉兴学院 Java综合实训报告 型 号 , 制 造 厂 家 额定功率,KW, 560 额定电压,V, 400 额定电流,A, 1010 额定频率,Hz, 50 额定转速,r/min, 1500 功率因数 0.8,滞后, 励磁电流,A, 2 励磁电压,V, 40 定子绕组接线 Y 0 冷却方式 风冷 励磁方式 强励倍数2 绝缘等级 H 防护等级 蓄电池容量,Ah, 92 1 型 号 形 式 闭式循环水冷却、涡轮增压 额定功率,KW, 628 额定转速,r/min, 1500 冷却方式 闭式循环水带热交换器 起动方式 24V直流电起动 燃油消耗,L,h, 保护与报警 定值与结果 保护与报警 定值与结果 过载 大于110%报警~大于120%延时5秒跳闸 出口电压高卸载 大于108% 短路 200%~延时0.08秒跳闸 出口电压低卸载 低于85% 电流不平衡 不平衡电流大于20%~延时5秒跳闸 电压高跳闸 大于110% 漏电电流 大于30%~延时10秒 三相电压不平衡 电压差大于10% 逆功率 大于8%~延时0.5秒 过频率 大于110% 超速 大于115%~延时5秒跳闸 低频率 小于85% 蓄电池电压低 小于21V 蓄电池电压高 大于30V 差动保护 0秒跳闸 失磁保护 跳闸 单相接地保护 跳闸 过电流保护 跳闸 润滑油压低 跳闸 三次自起动失败 发信并闭锁自起动 冷却水温高 发信 润滑油温度高 发信 24 嘉兴学院 Java综合实训报告 机油油压过低 跳闸 机油油压低 发信 冷却水断水 跳闸 燃油量过低 发信 油箱油位低 发信 冷却水水位低 发信 HYQ,Z ? /? 25 嘉兴学院 Java综合实训报告 26 嘉兴学院 Java综合实训报告 常见故障 产生原因 解 决 办 法 燃油供应量不足 开大燃油调节阀 雾化介质过量 关小雾化介质调节阀 点火位置不当 重新调整点火位置 燃油压力不稳定 稳定燃油压力 雾化介质压力不稳定 稳定雾化介质压力 雾化介质过量 关小雾化介质调节阀 喷头有异物堵塞 清理喷头 燃油压力低 增大燃油压力 雾化介质压力小 增大雾化介质压力 助燃风小 调大助燃风 燃油量大 关小燃油调节阀 火焰 助燃风小 调大助燃风 27 嘉兴学院 Java综合实训报告 雾化介质少 增大雾化介质流量 燃油量少 增加燃油供应量 焰呈 助燃风大 减小助燃风 燃油中有杂质 管路中设置过滤器 漏油 接头密封不严 拧紧软管接头 28
本文档为【JAVA聊天工具设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_348501
暂无简介~
格式:doc
大小:214KB
软件:Word
页数:0
分类:工学
上传时间:2018-11-01
浏览量:11