




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 面向对象课程设计 选题名称: 局域网聊天程序的设计与实现 姓 名: 学 号: 专业班级: 网络 系 (院): 计算机工程学院 设计时间: 2014/3/12 2014/4/12 设计地点: 软件实验室、教室 成绩:指导教师评语: 签名: 年 月 日面向对象课程设计报告 第 18 页,共 18 页1课程设计目的面向对象程序设计是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。2课程设计任务与要求:局域网聊天程序的设计与实现该程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。服务器端程序:可将消息发送到客户端和接受客户端发送来的信息3课程设计说明书(1).需求分析:本程序需要设计两个界面,一个登录界面,一个聊天界面,而服务器端负责监听,无需设置界面。服务器端只需在一个局域网中的电脑上运行,在局域网中处于监听状态,其他电脑后运行客户端,发送消息给服务端请求验证,验证通过即登录成功,客户端间即可正常通信。程序设计经初步分析应该需要七个模块:1.链接设置模块。对于服务器需要设置服务的端口等参数,客户端需要设置好本地端口、昵称等参数,初始化程序,发送链接请求给服务器端。2.链接断开模块。服务器需向所有客户端发送断开消息,客户端向服务器端发送断开消息。3.聊天数据发送处理模块。当用户发送表情时,需处理成相应的语句,接受消息的客户端需将相应的消息转换回来。4.短消息发送模块。用户输入消息,然后发送给聊天对象。5.网络数据接受处理模块。服务器端对收到来自网络各种数据进行相应处理。6.界面设计模块。聊天界面需友好,用户对程序的设置可以保存下来,下次运行时再恢复。7.用户管理模块。为服务器功能,可以将用户踢出聊天室。(2).概要设计:Chat.java:局域网聊天程序主程序初始化,设置默认值。ChatFrame.java:局域网聊天的主程序,包含用布局管理器设计的程序界面和按钮、菜单的响应模块,还有就是用于网络编程实现通信的socket套接字模块。用例图如下:Chat System 界面存放数据包Packet发送SocketClientClient配置端口和IP快捷键本程序可以点对点通信,局域网内只要IP与端口匹配,可使任意用户之间通信。(3).详细设计:类图如下: 本程序共有7个类,在两个源程序里面ChatFrame.java和Chat.java:ChatFrame.java为主要源程序,局域网聊天的所有功能(包括socket套接字和图形界面),Chat.java为调用程序并使程序初始化。ChatFrame类是用swing和awt包设计出程序的主界面,如菜单、文本框、按钮、对话框,定义它们的大小和位置,对其进行布局,并添加对按钮的监听,创建自定义类型的数据包,接收和发送都在run()函数中。SendListener类是发送监听的类,对发送按钮进行监听,讲即将发送的内容打包,把发送功能写在了发送按钮的事件响应代码中;由于接收是要保持监听状态的,所以把接收功能写在了一个进程中。SetDialog类是配置窗口类,在此设置菜单中的配置菜单的响应窗口,配置通信者的IP、端口与用户名。AboutDialog类是菜单中设置关于对话框的类,没有太大用处。SureListener类是负责对话框的确定按钮事件,传递数据到各个类。Config类是配置类,配置窗口获得的数据将会传到这里。4课程设计成果(1).主要代码:ChatFrame.javapackage Chat;import .*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;public class ChatFrame extends JFrame implements Runnable /Runnable接口,实现多线程private JTextArea sendArea = new JTextArea(20,20); /设置聊天文本框private JTextArea showArea = new JTextArea(10,20); /设置消息发送文本框private JButton sendButton = new JButton(发送); /设置发送按钮private MenuBar menuBar = new MenuBar();/设置菜单private Menu setMenu = new Menu(设置);private Menu helpMenu = new Menu(帮助);/一级菜单private MenuItem aboutItem = new MenuItem(关于);private MenuItem setItem = new MenuItem(配置参数);/二级菜单private Thread thread = new Thread(this);/把当前的类实例化为一个线程private Config config = new Config();/新建配置private JDialog dialog = new JDialog(this,参数配置,true); /当选择配置参数出现的对话框private int myPort;/设置端口ChatFrame(int in_myPort)super(局域网聊天工具);/主菜单标题setResizable(false);/固定窗口大小myPort = in_myPort;setItem.addActionListener(new SetDialog(dialog,this);/为配置参数设置监听窗口aboutItem.addActionListener(new AboutDialog(this);/为关于设置监听窗口initLayout();/初始化布局sendButton.addActionListener(new SendListener(this,sendArea,showArea,config);/为发送按钮设置事件监听thread.start();/启动线程addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););void initLayout()/程序主界面布局int w,h;w = 400;h = 500;setBounds(100,100,w,h);/设置位置大小setVisible(true);/组件可视setLayout(new GridLayout(3,1,10,15);/表格形式的布局管理器JPanel jp1,jp2;jp1 = new JPanel();jp2 = new JPanel();/设置聊天和发送面板JLabel jl1;jl1 = new JLabel(聊天记录框:);/显示文本jp1.setLayout(null);jp1.add(jl1);/添加文本组件jl1.setBounds(0,0,w,20);/设置jl1在jp1中位置大小JScrollPane scrollPane = new JScrollPane(showArea);scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);/*scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 考虑垂直策略,水平的可能不好*/jp1.add(scrollPane);/为聊天窗口设置水平滚动条策略scrollPane.setBounds(0,30,w,h/3-50);showArea.setWrapStyleWord(true);/不断词换行showArea.setLineWrap(true);/满一行自动换行JLabel jl2;jp2.setLayout(null);jl2 = new JLabel(发送框:);jp2.add(jl2);jl2.setBounds(0,0,w,20);sendArea.setBounds(0,30,w,h/3-20);jp2.add(sendArea);JPanel jp3 = new JPanel();add(jp1);add(jp2);add(jp3);jp3.add(sendButton);/添加发送按钮setMenuBar(menuBar);/添加菜单menuBar.add(setMenu);/菜单上添加设置一级菜单menuBar.add(helpMenu);/菜单上添加帮助一级菜单helpMenu.add(aboutItem);/帮助菜单上添加关于二级菜单setMenu.add(setItem);/设置菜单上添加设置二级菜单dialog.setBounds(120,150,200,250);/设置对话框位置尺寸JLabel IPLabel = new JLabel(对方IP);JLabel yourPortLabel = new JLabel(对方接收端口);JLabel nameLabel = new JLabel(本机名);/文本域JTextField IPTextField = new JTextField(15);/IP地址的单行文本输入框JTextField yourPortTextField = new JTextField(8);/端口的单行文本输入框JTextField nameTextField = new JTextField(15);/主机名字的单行文本输入框IPTextField.setText();/设置默认值yourPortTextField.setText(4332);yourPortTextField.setEnabled(true);/端口不可更改nameTextField.setText(zhouk);dialog.setLayout(new GridLayout(4,2,10,10);/为对话框设置表格布局管理器dialog.add(IPLabel);dialog.add(IPTextField);dialog.add(yourPortLabel);dialog.add(yourPortTextField);dialog.add(nameLabel);dialog.add(nameTextField);dialog.add(new Panel();/添加组建JButton sureButton = new JButton(确定);/dialog.add(sureButton);/添加确定按钮sureButton.addActionListener(new SureListener(IPTextField,yourPortTextField,nameTextField,dialog,config);/对按钮监听public void run()DatagramPacket dp = null;/创建发送类型的数据报,并初始化DatagramSocket ds = null;/创建套接字,并初始化byte buf = new byte1024;/确定数据报接受的数据的数组大小 try/捕获异常dp = new DatagramPacket(buf,buf.length);/创建接受类型的数据报,数据将存储在buf中ds = new DatagramSocket(myPort);System.out.println(myport=+myPort);catch (Exception e)while (true)tryds.receive(dp);/通过套接字接受数据 int length = dp.getLength();InetAddress address = dp.getAddress();/通过数据包得到发送方的IPint port = dp.getPort();/通过数据报得到发送方的端口号String message = new String(dp.getData(),0,length);/ 解析发送方传递的消息,并打印 /*showArea.append(收到数据长度:+length+n);showArea.append(收到数据来自:+address+端口:+port+n);showArea.append(收到数据是:+message+n);*/showArea.append(address+:+message+n);/在聊天区输出catch (Exception e)/发送事件class SendListener implements ActionListener /发送监听事件private JFrame ChatFrame;private JTextArea sendArea;private JTextArea showArea;private Config config;SendListener(JFrame in_ChatFrame, JTextArea in_sendArea, JTextArea in_showArea, Config in_config)ChatFrame = in_ChatFrame;sendArea = in_sendArea;showArea =in_showArea;config = in_config;System.out.println(in_port:+config.getyourPort();ChatFrame.validate();public void actionPerformed(ActionEvent e)/点击事件监听System.out.println(你点击了发送按钮);byte buf = sendArea.getText().trim().getBytes();/获取数据包中的消息,并发送tryInetAddress address = InetAddress.getByName(config.getIP();DatagramPacket dp = new DatagramPacket(buf,buf.length,address,Integer.parseInt(config.getyourPort();/发送数据包格式DatagramSocket ds = new DatagramSocket();/*showArea.append(数据包目标地址:+dp.getAddress()+n);showArea.append(数据包目标端口号:+dp.getPort()+n);showArea.append(数据包长度:+dp.getLength()+n);*/showArea.append(我:+sendArea.getText()+n);/发送内容显示sendArea.setText();ds.send(dp);/发送catch (Exception ee) /捕获异常输出/配置设置class SetDialog implements ActionListenerprivate JDialog dialog;private JFrame frame;SetDialog(JDialog in_dialog,JFrame parent)dialog = in_dialog;frame = parent;public void actionPerformed(ActionEvent e)dialog.validate();int x = frame.getX();/获取当前面板widthint y = frame.getY();/获取当前面板heightdialog.setBounds(x+50,y+50,200,250);dialog.setVisible(true);/关于对话框class AboutDialog extends JDialog implements ActionListenerprivate JFrame frame;private JLabel jl = new JLabel(感谢您的使用O(_)O网络121 周康);AboutDialog(JFrame parent)frame = parent;add(jl);public void actionPerformed(ActionEvent e)validate();int x = frame.getX();int y = frame.getY();setBounds(x+50,y+50,200,250);setVisible(true);/对话框的确定按钮事件class SureListener implements ActionListenerJTextField IPTextField;JTextField yourPortTextField;JTextField nameTextField;private Dialog dialog;private Config config;SureListener(JTextField in_IPTextField,JTextField in_yourPortTextField,JTextField in_nameTextField,JDialog in_dialog,Config in_config)IPTextField = in_IPTextField;yourPortTextField = in_yourPortTextField;nameTextField = in_nameTextField;dialog = in_dialog;config = in_config;public void actionPerformed(ActionEvent e)config.set(IPTextField.getText(),yourPortTextField.getText(),nameTextField.getText();System.out.println(config:yourPort:+config.getyourPort();dialog.setVisible(false);/参数class Configprivate String IP=;private String yourPort=4332;private String name=zhouk;public void set(String in_IP, String in_yourPort,String in_name)IP = in_IP;yourPort = in_yourPort;name = in_name;public String getIP()return IP;public String getyourPort()ret
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025下半年港股医药行业以创新药为主线关注出海机会
- 2025年农村一二三产业融合发展的农村物流体系建设报告
- 【高中语文】高考背诵补充篇目+《报任安书》课件
- 2025年冰雪运动主题公园项目运营管理优化与创新研究报告
- 2025年废旧电子产品回收与无害化处理产业链研究报告
- 2025年康复医疗器械市场需求动态与产品创新策略研究报告
- 中药配方颗粒质量标准与市场创新驱动发展研究报告
- 2025年美妆个性化定制服务行业人才培养与职业发展规划报告
- 2025年农村饮用水安全工程资金申请评估报告
- 劳动争议调节仲裁案例
- 医学影像学三基
- 10kV~500kV输变电及配电工程质量验收与评定标准:06变电自动化工程
- 高三家长会班主任发言稿课件
- 3停止间转法教案
- 四川省绵阳市2021年中考生物考试真题与答案解析
- 世界史阶段特征课件
- 2022-2023学年重庆市合川市三下数学期末学业质量监测模拟试题含解析
- 山东开放大学公共部门人力资源管理期末复习题
- 《园林植物识别与应用》项目七:综合课业题库及答案
- 人民医院肿瘤科临床技术操作规范2023版
- 物业承接查验办法培训
评论
0/150
提交评论