欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Java网络通信技术实现基于CS模式的聊天室aa.doc

    • 资源ID:61749682       资源大小:205KB        全文页数:27页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java网络通信技术实现基于CS模式的聊天室aa.doc

    武 汉 科 技 大 学 城 市 学 院课 程 设 计 报 告 课程设计名称 Java课程设计 题 目采用Java网络通信技术实现基于C/S模式的聊天室 院 系 信息工程学部 专 业 信息管理与信息系统 班 级 1班 姓 名 张峰 指导教师 于海平 题目:采用Java网络通信技术实现基于C/S模式的聊天室1 课程设计教学条件要求 eclipse/ netbeans/ Jbuilder 2 课程设计任务编写一个简易CS版聊天室,多个客户端可以同时发送信息,服务器端监听并显示到客户端页面。1要求可以实现多人同时在线聊天。2要求客户端和服务器端的界面采用Swing或SWT实现3服务器可以向多个客户进行广播通信。3 课程设计报告书主要内容1 需求分析2 总体设计 21 设计的总体思想与算法描述 22 模块结构图 23 各功能模块的功能与处理流程描述 24 界面设计3 各功能模块程序设计按照功能模块的功能与处理流程描述给出详细的程序代码,并给出重点语句的注释.4 小结4 课程设计要求1 按时到机房签到,在指定机位上机。遵守机房纪律。 2 独立完成课程设计任务。指导教师到机位上指导学生和分时段验收学生完成的程序。 3 按时提交打印的课程设计报告书。5 课程设计参考书1 许文宪 懂子建. Java程序设计教程与实训. 北京:北京大学出版社,2005.2 辛运帏 .Java程序设计.北京:清华大学出版社, 20043 美Echel,B .Java编程思想(第三版).北京:机械工业出版社,2005撰写者:江伟 指导老师:于海平目 录1 需求分析12 总体设计221 设计的总体思想与算法描述222 模块结构图22. 3界面设计33345界面5663程序设计74 小结22参考文献231 需求分析本系统是实现c/s模式的聊天室 首先要建立侦听服务,这个需求是服务器端的需求。其次还应实现:用户登录,包括客户端请求登录以及服务器端响应登录两个过程。收发聊天信息,包括客户端发送聊天信息以及服务器端转发聊天信息两个过程。收发系统信息,由服务器端发送给客户端的信息。用户下线,包括客户端请求下线以及服务器响应请求两个过程,这个与用户登录类似,服务器关闭。其中我还加入了文件传输功能,方便了用户文件的共享。2 总体设计21 设计的总体思想与算法描述依据需求分析的结果,该系统应设计成一个可以实现多人同时在线聊天功能的聊天软件,下面从软件的整体结构设计、界面设计、变量设计等方面阐述一下系统的总体设计。依据需求分析结果,设计应实现多人同时在线聊天,就应该分为服务端和用户端两个端口。用户端把信息发送到服务端,而后服务端再把信息分发到各个用户端。22 模块结构图图2.1 模块结构图2. 3界面设计 管理员界面图2.2 管理员界面 登陆界面图2.3登陆界面 聊天界面图2.4聊天界面 文件发送界面图2.5文件发送界面 接受提示界面图2.6接受提示界面 选择保存界面图2.7选择保存界面 传输成功提示界面图2.8传输成功提示界面3 程序设计package com.ff;public class StartServer public static void main(String args) StartServer startServer = new StartServer();StartServer.Server serverFrame=startServer.new Server(); class Server extends JFrame private JScrollPane jp_rec;private JScrollPane jp_send;private JScrollPane jp_list;private JTextArea jta_rec;private JTextArea jta_send;private JLabel lbl_rec;private JLabel lbl_edit;private JList jlist;private JButton btnSend;/ 发送消息按钮private JButton btnT;private DefaultListModel listModel;private HashMap<String,SocketThread> allUserLink = new HashMap<String,SocketThread>();public Server() init();try ServerSocket server_socket = new ServerSocket(9999);while (true) Socket client_socket = server_socket.accept();SocketThread dealThread = new SocketThread(client_socket);new Thread(dealThread).start(); catch (Exception ex) ex.printStackTrace();public void init() this.setTitle("管理员平台");this.setSize(800, 400);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setLocationRelativeTo(this);Container c = this.getContentPane();c.setLayout(null);jta_rec = new JTextArea("");jta_send = new JTextArea("");jp_rec = new JScrollPane();jp_send = new JScrollPane();jp_list = new JScrollPane();lbl_rec = new JLabel("-消息记录-");lbl_edit = new JLabel("-文本编辑-");btnSend = new JButton("发送");btnT = new JButton("T除成员");listModel=new DefaultListModel();jlist = new JList(listModel);jlist.setBorder(BorderFactory.createTitledBorder("在线成员");jp_rec.getViewport().add(jta_rec);jp_send.getViewport().add(jta_send);jp_list.getViewport().add(jlist);jta_rec.setLineWrap(true);jta_send.setLineWrap(true);jta_rec.setEditable(false);lbl_rec.setBounds(30, 10, 80, 20);jp_rec.setBounds(30, 30, 450, 100);lbl_edit.setBounds(30, 130, 80, 20);jp_send.setBounds(30, 150, 450, 100);btnSend.setBounds(350, 260, 80, 20);jp_list.setBounds(500, 30, 120, 220);btnT.setBounds(520, 260, 80, 20);c.add(lbl_rec);c.add(lbl_edit);c.add(jp_rec);c.add(jp_send);c.add(btnSend);c.add(jp_list);c.add(btnT);this.setVisible(true);class SocketThread extends BaseTrans private boolean threadON=true;public SocketThread(Socket client_socket) super(client_socket);btnSend.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) messageEvent("code=001;msg=公告 "+new Date().toLocaleString()+"rn"+jta_send.getText();jta_send.setText(""););btnT.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) if(jlist.getSelectedValue()!=null)SocketThread st=allUserLink.get(jlist.getSelectedValue().toString().trim();allUserLink.remove(jlist.getSelectedValue().toString().trim();st.sendMessage("code=0");messageEvent("code=001;msg=公告 "+new Date().toLocaleString()+"rn"+jlist.getSelectedValue()+"被管理员踢了出去!");st.closeLink();threadON=false;listModel.remove(jlist.getSelectedIndex(););public void messageEvent(String msg) StringUtil stringUtil = new StringUtil();stringUtil.AnalysisMessage(msg);String code = stringUtil.getValueByKey("code");if (code.equalsIgnoreCase("000") listModel.addElement(stringUtil.getValueByKey("userName");for (Iterator<String> it =allUserLink.keySet().iterator(); it.hasNext();) allUserLink.get(it.next().sendMessage("code=001;msg=公告 "+new Date().toLocaleString()+"rn"+stringUtil.getValueByKey("userName") +"进入了聊天室,大家欢迎他(她)吧!");allUserLink.put(stringUtil.getValueByKey("userName"),this);jta_rec.setText(jta_rec.getText()+"rn"+"公告 "+new Date().toLocaleString()+"rn"+stringUtil.getValueByKey("userName")+"进入了聊天室,大家欢迎他(她)吧!");jta_rec.setCaretPosition(jta_rec.getText().length(); else if (code.equalsIgnoreCase("001") for (Iterator<String> it =allUserLink.keySet().iterator(); it.hasNext();) allUserLink.get(it.next().sendMessage(msg);jta_rec.setText(jta_rec.getText()+"rn"+stringUtil.getValueByKey("msg");jta_rec.setCaretPosition(jta_rec.getText().length(); else if (code.equalsIgnoreCase("010") this.setFileName(stringUtil.getValueByKey("fileName");this.setFileLength(Integer.parseInt(stringUtil.getValueByKey("fileSize");initFileOutputStream("./");sendMessage("code=011"); else if (code.equalsIgnoreCase("012") 进入了012");sendMessage("code=013");setSendFileFlag(true); else if (code.equalsIgnoreCase("014") for (Iterator<String> it =allUserLink.keySet().iterator(); it.hasNext();) if (this != allUserLink.get(it.next() SocketThread st=allUserLink.get(it.next();st.setFileName(getFileName();st.setFileLength(getFileLength();st.sendMessage("code=015;username="+ stringUtil.getValueByKey("username")+ "fileName="+ getFileName()+ "fileSize="+ getFileLength(); else if (code.equalsIgnoreCase("016") 进入了016");sendFileData("./" + this.getFileName();sendMessage("code=018"); else if (code.equalsIgnoreCase("017") for (Iterator<String> it =allUserLink.keySet().iterator(); it.hasNext();) if (this != allUserLink.get(it.next() allUserLink.get(it.next().initNet();public void run() while (threadON) receive();客户端代码package com.ff;public class StartClient public static void main(String args)StartClient sc=new StartClient();StartClient.Client client=sc.new Client();class Clientpublic Client()init();public void init()trySocket client_socket=new Socket(InetAddress.getLocalHost(),9999);new Thread(new ChatPanel(client_socket).start();catch(Exception ex)ex.printStackTrace();class ChatPanel extends BaseTransprivate String userName;private JFrame jThis;private JLabel lbl_rec;private JLabel lbl_edit;private JTextArea jta_rec;/接收消息框private JTextArea jta_send;/发送消息框private JTextField jtxt_file;private JScrollPane jp_rec;private JScrollPane jp_send;private JButton btnSelFile;/选择文件private JButton btnSend;/发送消息按钮private JFileChooser jfc;/文件选择器public ChatPanel(Socket client_socket)super(client_socket);userName=JOptionPane.showInputDialog("请输入用户名:");init();public void init()jThis=new JFrame();jThis.setTitle("你好:"+userName+" 欢迎进入聊天程序");jThis.setSize(600,400);jThis.setDefaultCloseOperation(jThis.EXIT_ON_CLOSE);jThis.setLocationRelativeTo(jThis);Container c=jThis.getContentPane();c.setLayout(null);lbl_rec=new JLabel("-消息记录-");lbl_edit=new JLabel("-文本编辑-");jtxt_file=new JTextField("");jta_rec=new JTextArea("");jta_send=new JTextArea("");jp_rec=new JScrollPane();jp_send=new JScrollPane();btnSelFile=new JButton("文件.");btnSend=new JButton("发送");jfc=new JFileChooser();jp_rec.getViewport().add(jta_rec);jp_send.getViewport().add(jta_send);jta_rec.setLineWrap(true);jta_send.setLineWrap(true);jtxt_file.setEditable(false);jta_rec.setEditable(false);jfc.setDialogTitle("请选择要传送的文件.");lbl_rec.setBounds(30,10,80,20);jp_rec.setBounds(30,30, 450, 100);lbl_edit.setBounds(30,130,80,20);jp_send.setBounds(30,150,450,100);jtxt_file.setBounds(30,260,150,20);btnSelFile.setBounds(180,260,80,20);btnSend.setBounds(350,260,80,20);btnSelFile.addActionListener(new ActionListener()public void actionPerformed(ActionEvent ae)jfc.showOpenDialog(null);jtxt_file.setText(jfc.getSelectedFile().getPath()+""););c.add(lbl_rec);c.add(lbl_edit);c.add(jp_rec);c.add(jp_send);c.add(jtxt_file);c.add(btnSelFile);c.add(btnSend);btnSend.addActionListener(new ActionListener()public void actionPerformed(ActionEvent ae)sendMessage("code=001;msg="+userName+" "+new Date().toLocaleString()+"rn"+jta_send.getText();jta_send.setText("");if(jtxt_file.getText().length()>4)File file=new File(jtxt_file.getText().trim();sendMessage("code=010;fileName="+file.getName()+"fileSize="+file.length();sendMessage("code=000;username="+userName);jThis.setVisible(true);public void messageEvent(String msg) StringUtil stringUtil=new StringUtil();stringUtil.AnalysisMessage(msg);String code=stringUtil.getValueByKey("code");if(code.equalsIgnoreCase("0")this.closeLink();JOptionPane.showMessageDialog(jThis,"您已近被管理员T走了,再见!");jThis.dispose();System.exit(0);else if(code.equalsIgnoreCase("001")jta_rec.setText(jta_rec.getText()+"rn"+stringUtil.getValueByKey("msg");jta_rec.setCaretPosition(jta_rec.getText().length();else if(code.equalsIgnoreCase("011")sendMessage("code=012");else if(code.equalsIgnoreCase("013")sendFileData(jtxt_file.getText().trim();this.initNet();jtxt_file.setText("");sendMessage("code=014;username="+userName);else if(code.equalsIgnoreCase("015")setFileName(stringUtil.getValueByKey("fileName");setFileLength(Integer.parseInt(stringUtil.getValueByKey("fileSize");int result=JOptionPane.showConfirmDialog(null,userName+","+stringUtil.getValueByKey("username")+"发文件【"+getFileName()+"】给你,要接受吗?","提示",JOptionPane.OK_CANCEL_OPTION);if(result=JOptionPane.OK_OPTION)JFileChooser jfc=new JFileChooser();jfc.setDialogTitle("请选择保存的目录.");jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);jfc.showOpenDialog(jThis);String path=jfc.getSelectedFile().getPath();initFileOutputStream(path+"/");sendMessage("code=016");setSendFileFlag(true);else if(result=JOptionPane.CANCEL_OPTION)sendMessage("code=017");else if(code.equalsIgnoreCase("018")JOptionPane.showMessageDialog(jThis,userName+",文件【"+getFileName()+"】传输成功","提示",JOptionPane.INFORMATION_MESSAGE);/jta_rec.setText(jta_rec.getText()+"rn"+msg);public void run() while(true)receive(); 4 小结 每次课程设计都是一个学习的升华,这次我做的课题是网络通信技术实现基于C/S模式的聊天室程序设计。为了使课程设计能够顺利的进行,刚拿到任务书,我就开始复习课本和软件工程中的相关知识,并去图书馆查阅了很多资料,大致熟悉了课题所需要的知识点。然后拟定JAVA设计的框架,全面布局设计的界面。准备工作完成之后开始编写代码了,事实远超出了我当初想象的那样简单。在实际的代码设计中,我碰到了很多难以解决的困难。首先是不知道怎么构建框架,等大致有了框架,却不知道怎么让这个框架有血有肉,去实现应有的功能。幸亏有指导老师的热情辅导和鼓励,为我迷途指津,才使得我的课程设计不至于夭折。所谓万事开头难,开始许多的小问题都会造成我的进程的停止,比如大小写没注意,括号没打好,常常一个小小的问题都会让我停滞不前,于是与同学们讨论。在这样浓浓的氛围中,学习效率极高,不到一个星期我就构建好了框架,并做了一些后续准备。因为有了开始的准备工作,后来的事情就简单多了。之前我上网查询相似代码学习借鉴,现在就把那些代码用上了,虽然常常出些问题,但是因为有老师的指导,一切都迎刃而解,课程设计不久就完成了。最后我想说感谢老师和同学们,使他们的帮助才使得我的课程设计如此顺利的完成。但是完成之后我还是觉得有些遗憾,但是我努力了。所以我期望下次课程设计有更好的表现。 参考文献1孙卫琴.JAVA面向对象编程M.北京:电子工业出版社.20062彭晨阳.Java实用系统开发指南M.北京:机械工业出版社.2008 3朱仲杰. Palm应用程序设计使用Java语言M.北京:中国电力出版社4迪特尔.Java程序设计教程/国外经典教材M.北京:清华大学出版社5蔡翠平 .Java程序设计.北京:清华大学出版社,2003.课程设计评分表评分标准:1. 学生是否严格遵守课程设计纪律,按照规定时间完成设计任务(占30%)2. 程序设计的质量与规范:(占40%)(1)是否采用了良好的设计方法,独立完成程序设计(2)程序界面设计是否合理、美观(3)数据库设计是否合理,具有良好的扩展性(4)程序是否运行正常,未见运行错误3. 课程设计报告书的质量与规范 (占30%)教师评分:1.学生出勤得分: _2.程序设计得分: _3.设计报告得分: _ 总分:_教师评语: 根据该生在课程设计期间,是否严格遵守课程设计纪律,按照规定时间完成设计任务,完成的程序设计的质量与规范,提交的课程设计报告书的质量与规范等多方面的评分,该生本次课程设计的评分为:_ 教师签名: 日期: 年 月 日

    注意事项

    本文(Java网络通信技术实现基于CS模式的聊天室aa.doc)为本站会员(e****s)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开