




免费预览已结束,剩余20页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录 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 5 3 2 4 类 Server 5 3 2 5 类 YeeKuMap 6 3 2 6 类 ServerThread 6 3 2 8 类 ClinetThread 7 4 主要程序实现 7 5 测试与结果 17 5 1 功能模块界面 17 6 心得体会 23 参考文献 24 嘉兴学院 Java 综合实训报告 1 聊天小程序聊天小程序 1 需求分析需求分析 聊天工具大多数由客户端程序和服务器程序外加服务器端 本程序采用客 服机 服务器架构模式 通过 Java 提供的 Socket 类来连接客户机和服务器并使 客户机与服务器之间相互通信 由于聊天是多点对多点的而 Java 提供的多线程 功能 用多线程可完成多点对多点的聊天 主要有两个应用程序 分别为服务器程序和客户端程序 服务器应用程序主要用于消 息转发 以及向所有用户发送系统消息等 客户端应用程序主要用于客户聊天记录的显示 和信息输入 采用 Client Server C S 体系结构 即客户机 服务器体系结构 聊天服务器 专门用于监控用户状态和转发消息 客户端负责接收消息的用户序列和消息文本发送到服 务器 该聊天系统实现私聊 群聊 用户登陆 退出聊天系统等功能 本系统的主要功能有以下几个部分组成 本系统的主要功能有以下几个部分组成 服务器端模块 系统信息的输入 可以输入任何信息 功能 将系统信息广播至各个客户端 踢除用户 服务器可以选择性删除在线的用户 客户端模块 登陆服务器 列出当前在线用户信息 私聊和多人聊天的选择 发言 对输入的数据进行发送 离开状态 嘉兴学院 Java 综合实训报告 2 2 概要设计概要设计 2 1 功能图功能图 图 1 程序功能图 3 详细设计详细设计 3 1类关系图类关系图 嘉兴学院 Java 综合实训报告 3 Frame void actionPerformed void closeRs void init void main void SERNER int jfc keyIn string listModel peopleList ps socket userName string Client socket run void bin bin bout socket RTFSend RTFReceive RTFReceive run void receive socket RTFReceive 结束1 结束2 Server Server init void main void SERVER PORT int clients int kick ss Server ClientThread void getRealMsg string run void br ClientThread ServerThreaad getRealMsg string idl run void br ps socket ServerThread put void getKeyByVALUE removeByValue void YeekumAP 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 图 2 类关系图 3 2类设计图类设计图 3 2 1 类 类 client 模块名称Client 功能描述 启动客户端系统 接口与属性 SERNER int Jfc Peoplrlist Ps keyIn string 嘉兴学院 Java 综合实训报告 4 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 空 嘉兴学院 Java 综合实训报告 5 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 嘉兴学院 Java 综合实训报告 6 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 空 嘉兴学院 Java 综合实训报告 7 4 主要程序实现主要程序实现 客户端 客户端 importimport java io java io importimport importimport java awt java awt importimport java awt List java awt List importimport java awt event ActionEvent java awt event ActionEvent importimport java awt event ActionListener java awt event ActionListener importimport javax swing javax swing importimport java util java util publicpublic classclass ClientClient extendsextends JFrameJFrame implementsimplements ActionListener ActionListener privateprivate staticstatic finalfinal intint SERVER PORTSERVER PORT 30000 30000 privateprivate SocketSocket socket socket privateprivate PrintStreamPrintStream ps ps privateprivate BufferedReaderBufferedReader brServer brServer privateprivate JFileChooserJFileChooser jfc jfc privateprivate StringString keyIn keyIn publicpublic staticstatic DefaultListModelDefaultListModel listModellistModel newnew DefaultListModel DefaultListModel ListModelListModel对象对象 privateprivate staticstatic JListJList peopleList peopleList ButtonButton button1 newbutton1 new Button Button 发送发送 staticstatic ButtonButton button2 newbutton2 new Button Button 私聊私聊 staticstatic ButtonButton button3 newbutton3 new Button Button 发送文件发送文件 staticstatic JCheckBoxJCheckBox jcbjcb newnew JCheckBox JCheckBox 私聊私聊 StringString userNameuserName null null JButton JButton sendflie null sendflie null staticstatic TextAreaTextArea txtA1 newtxtA1 new TextArea TextArea static static ListList list1list1 null null staticstatic TextAreaTextArea txtA2txtA2 newnew TextArea TextArea JTextArea JTextArea txtA2 null txtA2 null publicpublic voidvoid Frame Frame JFrameJFrame frame newframe new JFrame JFrame 客户端 聊天窗口客户端 聊天窗口 frame setDefaultCloseOperation JFrame EXIT ON CLOSE frame setDefaultCloseOperation JFrame EXIT ON CLOSE ContainerContainer pane frame getContentPane pane frame getContentPane pane setLayout null pane setLayout null frame setLocation 320 frame setLocation 320 240 240 frame setSize 500 500 frame setSize 500 500 frame setVisible true frame setVisible true 嘉兴学院 Java 综合实训报告 8 TextAreaTextArea txtA1 newtxtA1 new TextAreaTextArea Client txtA1 setBounds 10 Client txtA1 setBounds 10 10 10 370 300 370 300 TextArea TextArea Client txtA2 newClient txtA2 new TextArea TextArea Client txtA2 setBounds 10 Client txtA2 setBounds 10 340 340 370 370 80 80 ListList list2 newlist2 new List List list2 setBounds 400 list2 setBounds 400 10 90 300 10 90 300 peopleListpeopleList newnew JList listModel JList listModel peopleList setSelectionMode ListSelectionModel SINGLE SELECTION peopleList setSelectionMode ListSelectionModel SINGLE SELECTION 设置单选设置单选 JScrollPaneJScrollPane ListScrollPaneListScrollPane newnew JScrollPane peopleList JScrollPane peopleList Client peopleList setBounds 400 Client peopleList setBounds 400 10 90 300 10 90 300 ListList list3 newlist3 new List List list3 setBounds 400 list3 setBounds 400 340 340 90 90 120 120 ButtonButton button3 newbutton3 new Button Button 发送文件发送文件 button3 setBounds 405 350 50 20 button3 setBounds 405 350 50 20 button3 addActionListener this button3 addActionListener this ButtonButton button1 newbutton1 new Button Button 发送发送 jcb setBounds 160 jcb setBounds 160 430 430 80 80 40 40 button1 setBounds 240 440 30 20 button1 setBounds 240 440 30 20 button1 addActionListener this button1 addActionListener this ButtonButton button2 newbutton2 new Button Button 私聊私聊 button2 setBounds 300 440 button2 setBounds 300 440 30 30 20 20 button2 addActionListener this button2 addActionListener this pane add txtA1 pane add txtA1 pane add txtA2 pane add txtA2 pane add peopleList pane add peopleList pane add list1 pane add list1 pane add list2 pane add list2 pane add list3 pane add list3 pane add jcb pane add jcb pane add button1 pane add button1 pane add button2 pane add button2 pane add button3 pane add button3 嘉兴学院 Java 综合实训报告 9 public public staticstatic voidvoid main String main String args args FrameFrame frame1 newframe1 new Frame Frame Frame Frame frame2 newframe2 new Frame Frame frame1 gost frame1 gost setVisible true setVisible true setBounds 400 100 600 500 setBounds 400 100 600 500 ContainerContainer con con getContentPane getContentPane con setVisible true con setVisible true con setLayout newcon setLayout new FlowLayout FlowLayout txtA1 newtxtA1 new JTextArea 15 45 JTextArea 15 45 listModellistModel newnew DefaultListModel DefaultListModel peopleListpeopleList newnew JList listModel JList listModel peopleList setSelectionMode ListSelectionModel SINGLE SELECTION peopleList setSelectionMode ListSelectionModel SINGLE SELECTION 设置单选设置单选 JScrollPaneJScrollPane ListScrollPaneListScrollPane newnew JScrollPane peopleList JScrollPane peopleList txtA2 newtxtA2 new JTextArea 5 45 JTextArea 5 45 yesBt newyesBt new JButton JButton 确定发送确定发送 yesBt addActionListener this yesBt addActionListener this cancelBt newcancelBt new JButton JButton 发送文件发送文件 cancelBt addActionListener this cancelBt addActionListener this fr add btnSend fr add btnSend fr setSize 200 200 fr setSize 200 200 fr setVisible true fr setVisible true 为发送按钮注册事件为发送按钮注册事件 cancelBt addActionListener this cancelBt addActionListener this add newadd new JLabel JLabel 客户端 客户端 con add newcon add new JLabel JLabel 聊天内容 聊天内容 con add txtA1 con add txtA1 add ListScrollPane add ListScrollPane BorderLayout EAST BorderLayout EAST con add txtA2 con add txtA2 con add cancelBt con add cancelBt con add yesBt con add yesBt this addWindowListener this this addWindowListener this validate validate con validate con validate server SocketSever server SocketSever publicpublic voidvoid init Clientinit Client client client trytry 嘉兴学院 Java 综合实训报告 10 初始化代表键盘的输入流初始化代表键盘的输入流 keyIn keyIn this txtA2 getText this txtA2 getText keyIn keyIn newnew BufferedReader newBufferedReader new InputStreamReader System in InputStreamReader System in 连接到服务器连接到服务器 socketsocket newnew Socket 127 0 0 1 Socket 127 0 0 1 SERVER PORT SERVER PORT 获取该获取该SocketSocket对应的输入流和输出流对应的输入流和输出流 psps newnew PrintStream socket getOutputStream PrintStream socket getOutputStream brServerbrServer newnew BufferedReader newBufferedReader new InputStreamReader socket getInputStream InputStreamReader socket getInputStream StringString tiptip 采用循环不断地弹出对话框要求输入用户名采用循环不断地弹出对话框要求输入用户名 while true while true client userNameclient userName JOptionPane showInputDialog tipJOptionPane showInputDialog tip 输入用户名输入用户名 将用户输入的用户名的前后增加协议字符串后发送将用户输入的用户名的前后增加协议字符串后发送 ps println YeekuProtocol USER ROUNDps println YeekuProtocol USER ROUND userName userName YeekuProtocol USER ROUND YeekuProtocol USER ROUND 读取服务器的响应读取服务器的响应 StringString resultresult brServer readLine brServer readLine 如果用户重复 开始下次循环如果用户重复 开始下次循环 if result equals userName if result equals userName Client listModel addElement userName Client listModel addElement userName ifif result equals YeekuProtocol NAME REP result equals YeekuProtocol NAME REP tiptip 用户名重复 请重新用户名重复 请重新 continue continue 如果服务器返回登录成功 结束循环如果服务器返回登录成功 结束循环 ifif result equals YeekuProtocol LOGIN SUCCESS result equals YeekuProtocol LOGIN SUCCESS client Frame client Frame Client listModel addElement userName Client listModel addElement userName break break 捕捉到异常 关闭网络资源 并退出该程序捕捉到异常 关闭网络资源 并退出该程序 catchcatch UnknownHostException UnknownHostException ex ex System out println System out println 找不到远程服务器 请确定服务器已经启动 找不到远程服务器 请确定服务器已经启动 嘉兴学院 Java 综合实训报告 11 closeRs closeRs System exit 1 System exit 1 catch catch IOException IOException ex ex System out println System out println 网络异常 请重新登录 网络异常 请重新登录 closeRs closeRs System exit 1 System exit 1 以该以该SocketSocket对应的输入流启动对应的输入流启动ClientThreadClientThread线程线程 newnew ClientThread brServer start ClientThread brServer start 定义一个读取键盘输出 并向网络发送的方法定义一个读取键盘输出 并向网络发送的方法 private private voidvoid readAndSend StringreadAndSend String keyIn keyIn try try 不断读取键盘输入不断读取键盘输入 StringString lineline null null while linewhile line keyIn keyIn null null 如果发送的信息中有冒号 且以如果发送的信息中有冒号 且以 开头 则认为想发送私聊信息开头 则认为想发送私聊信息 ifif line indexOf line indexOf 0 0 line substring 2 ps println YeekuProtocol PRIVATE ROUNDps println YeekuProtocol PRIVATE ROUND line split 0 line split 0 YeekuProtocol SPLIT SIGNYeekuProtocol SPLIT SIGN line split 1 line split 1 YeekuProtocol PRIVATE ROUND YeekuProtocol PRIVATE ROUND else else if line equals byebye if line equals byebye System out println aaaaaaaaaaaaabbbbbbbbbbbbbbbb ps System out println aaaaaaaaaaaaabbbbbbbbbbbbbbbb ps StringString keykey String Server clients getKeyByValue ps String Server clients getKeyByValue ps System out println aaaaaaaaaaaaa key System out println aaaaaaaaaaaaa key ps println YeekuProtocol LOGIN OUT key YeekuProtocol LOGIN OUT ps println YeekuProtocol LOGIN OUT key YeekuProtocol LOGIN OUT else else ps println YeekuProtocol MSG ROUNDps println YeekuProtocol MSG ROUND line line YeekuProtocol MSG ROUND YeekuProtocol MSG ROUND 捕捉到异常 关闭网络资源 并退出该程序捕捉到异常 关闭网络资源 并退出该程序 catch catch IOException IOException ex ex System out println System out println 网络通信异常 请重新登录 网络通信异常 请重新登录 closeRs closeRs System exit 1 System exit 1 嘉兴学院 Java 综合实训报告 12 Override Override publicpublic voidvoid actionPerformed ActionEventactionPerformed ActionEvent e e TODOTODO Auto generatedAuto generated methodmethod stubstub if e getSource button1 if e getSource button1 StringString lineline Client txtA2 getText Client txtA2 getText while linewhile line null null StringString usernameusername null null StringString namename null null 如果发送的信息中有冒号 且以如果发送的信息中有冒号 且以 开头 则认为想发送私聊信息开头 则认为想发送私聊信息 ifif jcb isSelected jcb isSelected Client peopleList getSelectedValue line line line substring 2 line substring 2 String String siliaosiliao YeekuProtocol PRIVATE ROUNDYeekuProtocol PRIVATE ROUND userName userName YeekuProtocol SPLIT SIGN YeekuProtocol SPLIT SIGN name name YeekuProtocol SPLIT SIGN YeekuProtocol SPLIT SIGN line line YeekuProtocol PRIVATE ROUND YeekuProtocol PRIVATE ROUND System out println siliao System out println siliao 这是客户端发送的这是客户端发送的 ps println siliao ps println siliao Client txtA2 setText null Client txtA2 setText null if if line indexOf line indexOf 0 0 line substring 2 ps println YeekuProtocol PRIVATE ROUNDps println YeekuProtocol PRIVATE ROUND line split 0 line split 0 YeekuProtocol SPLIT SIGNYeekuProtocol SPLIT SIGN line split 1 line split 1 YeekuProtocol PRIVATE ROUND YeekuProtocol PRIVATE ROUND else else if line equals byebye if line equals byebye System out println aaaaaaaaaaaaabbbbbbbbbbbbbbbb ps System out println aaaaaaaaaaaaabbbbbbbbbbbbbbbb ps StringString keykey String Server clients getKeyByValue ps String Server clients getKeyByValue ps System out println aaaaaaaaaaaaa key System out println aaaaaaaaaaaaa key ps println YeekuProtocol LOGIN OUT key YeekuProtocol LOGIN OUT ps println YeekuProtocol LOGIN OUT key YeekuProtocol LOGIN OUT else else ps println YeekuProtocol MSG ROUNDps println YeekuProtocol MSG ROUND line line YeekuProtocol MSG ROUND YeekuProtocol MSG ROUND TextComponent TextComponent Client txtA2 setText Client txtA2 setText 嘉兴学院 Java 综合实训报告 13 Client txtA2 setText null Client txtA2 setText null break break if e getSource Client button3 if e getSource Client button3 jfc showOpenDialog newjfc showOpenDialog new Frame Frame 启动新的线程传递文启动新的线程传递文 件件 RTFSendRTFSend sendsend newnew RTFSend jfc getSelectedFile RTFSend jfc getSelectedFile send start send start 关闭关闭SocketSocket 输入流 输出流的方法 输入流 输出流的方法 privateprivate voidvoid closeRs closeRs try try ifif keyIn keyIn null null ps close ps close ifif brServer brServer null null ps close ps close ifif ps ps null null ps close ps close if if socket socket null null keyIn close keyIn close catch catch IOException IOException ex ex ex printStackTrace ex printStackTrace public public voidvoid actionPerformed1actionPerformed1 ActionEvent ActionEvent e e 弹出文件选择对话框弹出文件选择对话框 if e getSource Client button3 if e getSource Client button3 jfc showOpenDialog newjfc showOpenDialog new Frame Frame 启动新的线程传递文启动新的线程传递文 件件 RTFSendRTFSend sendsend newnew RTFSend jfc getSelectedFile RTFSend jfc getSelectedFile send start send start 嘉兴学院 Java 综合实训报告 14 publicpublic staticstatic voidvoid main String main String args args ClientClient clientclient newnew Client Client client Frame client Frame client init client client init client 服务器端 服务器端 importimport importimport java io java io importimport java awt java awt importimport javax swing javax swing importimport java awt event java awt event publicpublic classclass ServerServer extendsextends JFrameJFrame privateprivate staticstatic finalfinal intint SERVER PORTSERVER PORT 30000 30000 publicpublic staticstatic DefaultListModelDefaultListModel listModel listModel ListModelListModel对象对象 privateprivate JListJList peopleList peopleList privateprivate JButtonJButton kick kick privateprivate ServerSocketServerSocket ss ss 使用使用MyMapMyMap对象来保存每个客户名字和对应输出流之间的对应关系 对象来保存每个客户名字和对应输出流之间的对应关系 publicpublic staticstatic YeekuMap StringYeekuMapPrintStream clientsclients new new YeekuMap StringYeekuMap PrintStream publicpublic Server Server super super 服务器服务器 setLayout newsetLayout new BorderLayout BorderLayout listModellistModel newnew DefaultListModel DefaultListModel peopleListpeopleList newnew JList listModel JList listModel peopleList setSelectionMode ListSelectionModel SINGLE SELECTION peopleList setSelectionMode ListSelectionModel SINGLE SELECTION 设置设置 单选单选 JScrollPaneJScrollPane ListScrollPaneListScrollPane newnew JScrollPane peopleList JScrollPane peopleList add ListScrollPane add ListScrollPane BorderLayout CENTER BorderLayout CENTER kickkick newnew JButton JButton 踢人踢人 kick addActionListener newkick addActionListener new ActionListener ActionListener publicpublic voidvoid actionPerformed ActionEventactionPerformed ActionEvent e e TODOTODO Auto generatedAuto generated methodmethod stubstub if e getSource kick if e getSource kick StringString userNameuserName String peopleList getSelectedValue String peopleList getSelectedValue 从列表里得到用户选择的项从列表里得到用户选择的项 嘉兴学院 Java 综合实训报告 15 PrintStreamPrintStream psps Server clients get userName Server clients get userName ps println Server clients getKeyByValue ps ps println Server clients getKeyByValue ps 您已经被迫下您已经被迫下 线 请重新登录线 请重新登录 1 1 告知本人被迫下线告知本人被迫下线 ps flush ps flush ps close 2 ps close 2 关闭流关闭流 Server clients removeByValue ps Server clients removeByValue ps forfor PrintStream PrintStream clientPsclientPs Server clients valueSet Server clients valueSet clientPs println clientPs println 用户用户 userName userName 已经下线 已经下线 3 3 通知其他人通知其他人 这个用户已经下线这个用户已经下线 listModel removeElement userName 4 listModel removeElement userName 4 从列表中移除从列表中移除 forfor PrintStream PrintStream clientPsclientPs Server clients valueSet Server clients valueSet clientPs println YeekuProtocol USER REMOVE userName YeekuProtocol USER REMOclientPs println YeekuProtocol USER REMOVE userName YeekuProtocol USER REMO VE VE dataList getSelectedValue dataList getSelectedValue add kick add kick BorderLayout SOUTH BorderLayout SOUTH setLocation 300 setLocation 300 100 100 setSize 150 setSize 150 450 450 setResizable false setResizable false 设置不能最
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数轴 (3知识点+7大题型+过关测) 附答案-2025年人教版新七年级数学专项提升
- 人教版高考历史一轮复习讲义-冷战与国际格局的演变(含解析)
- CN120200489A 级联式变频器、控制方法及计算机可读存储介质
- 配音演员职业知识培训班课件
- 老师的业务知识和培训课件
- 老刀修面培训知识课件
- 配电网安全课课件
- 配电线路课件教学
- 老人与海鸥课件
- 配电箱基础知识培训课件
- 小学教育教学工作计划范文(5篇)
- 汽轮机汽封系统
- 语言学纲要(全套课件354P)
- 李东垣《脾胃论》【译文】
- 复变函数与积分变换教案
- 湖北厂房施工进度计划网络图和横道图
- GB/T 7424.2-2008光缆总规范第2部分:光缆基本试验方法
- GB/T 2423.22-2012环境试验第2部分:试验方法试验N:温度变化
- 最新低压电工安全培训课件
- 整机部整机出货检验重点标准
- 人像摄影:户外人像摄影课件
评论
0/150
提交评论