




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西安郵電學院西安郵電學院 网络课程设计 设计报告 题题 目 目 基于基于 TCPTCP SOCKETSOCKET 的的 JAVAJAVA 聊天室聊天室 院系名称 院系名称 计算机学院计算机学院 专业名称 专业名称 网络工程网络工程 班班 级 级 学生姓名 学生姓名 学号 学号 8 位 位 指导教师 指导教师 设计起止时间 设计起止时间 2011 年 6 月 20 日 2011 年 7 月 1 日 第一章第一章 功能功能分析分析 1 11 1 需求分析需求分析 人们日常生活中越来越多地使用聊天室这项应用来为自己的工作和学习服 务 一个操作简单 界面友好 运行稳定的聊天室对于小型局域网的用户可以 起到很好的交流作用 所谓聊天室就是一个可以让许多用户同时互相通信的网 上园地 个人用户可以通过聊天室将自己融入整个主流社会中 根据目前使用聊天室的用户需求显示 用户对于聊天室主要有以下几点要 求 1 与聊天室成员一起聊天 2 可以与聊天室成员私聊 3 可以改变聊天内容风格 4 用户注册 含头像 登录 5 服务器监控聊天内容 6 服务器过滤非法内容 7 服务器发送通知 8 服务器踢人 9 保存服务器日志 10 保存用户聊天信息 该简易聊天室是为许多喜爱聊天的用户开发设计的 和许多大型的网络聊 天室相比该小聊天室功能比较简单 但能实现基本的聊天功能 点对多 点对 点聊天和基本的用户功能 登录 查看在线用户等 1 21 2 软件功能描述软件功能描述 1 户设置 用户自定义自己的登录名 成功设置后 服务端能接收到新设置 的用户名 2 登录功能 在服务端开启的情况下 用户可以以自己自定义或者默认的登 录名和登录地址端口登录到客户端 并能在服务器端显示登录状态 3 公聊 用户可以与 所有人 聊天 在线用户可正常接收并正确显示公聊 消 4 私聊 用在线用户和其他用户聊天 记录对于聊天室的其他用户是不可见 的 5 聊天心情 用户在聊天的过程中可以选择相应的心情来表达自己的情感 6 系统消息 服务端运行 为每一个用户都能接收服务器端发送的信息提示 信息 7 用户的状态 每一个客户端用户都可以实时看到目前其他在线用户的状态 8 用户剔除 用户可以被系统剔除 并重新登记登录名和地址 9 用户退出 用户可以在正常情况下退出聊天室 10 服务端控制 服务端开启的情况下 用户才能登陆成功和聊天 用户设 置的地址端口也必须与服务端的侦听端口一致 否则不能登录 第二章第二章 主要模块描述及流程图主要模块描述及流程图 2 1 模块介绍模块介绍 本聊天室分为聊天室服务端和聊天室客户端 服务端与客户端之间通过套 接口 Socket TCP 连接 在 java 中使用套接口相当简单 Java API 为处理套接 口的通信提供了一个类 Socket 服务器采用多线程以满足多用户的 请求 并通过创建一个 AppSocket 来监听来自客户的连接请求 默认 IP 地址为 127 0 0 1 默认端口为 8888 2 1 12 1 1 服务端模块图服务端模块图 聊天室服务端模块图 3 1 1 端口服务 输入要侦听的端口 默认为 8888 启动服务 启动服务器 并开始在设置的端口中侦听 客户端用户可以登录并 聊天 停止服务 关闭服务器 侦听结束 客户端用户不能再聊天 发送系统消息 服务器端给所有人或者个别用户发送消息 消息显示 可以显示所有用户的聊天记录 和上线 下线信息 退出服务器 退出程序 并停止服务 2 1 22 1 2 客户端模块图客户端模块图 聊天室服务端 端 口 服 务 启 动 服 务 发 送 系 统 消 息 聊天室客户端 用 户 设 置 连 接 设 置 发送 接收 聊天 消息 用 户 登 录 停 止 服 务 退 出 服 务 器 退出 消 息 显 示 用户设置 用户可以设置自己的用户名进行聊天 连接设置 用户可以设置自己的服务器的 IP 端口号 默认地址为 127 0 0 1 8888 用户登录 在聊天室服务端已开启的情况下 用户才能登录 之后才能开始聊天 用户注 销 退出聊天 可以继续修改用户设置和连接设置 发送和接收聊天信息 用户可以用户发送信息 并能看送给自己或所有人的消息 退出 关闭所有聊天并退出客户端 2 2 流程图流程图 设置侦听端口 默认端口 8888 设置用户名 默认连接地址或用户名 设置 IP 地址和端口 2 3 服务器客户端关系图服务器客户端关系图 1 聊天室服务器端设计 ActionListe ner ChatServer port public static in serverSocket ServerSocket messageShow JTextArea userLinkList UserLinkList showStatus JTextField ChatServer public init public void startService public void stopService public void sendStopToAll public void sendMsgToAll String public void sendSystemMessage public void JFrame Thread ServerListen server ServerSocket userLinkList UserLinkList isStop public Boolean ServerListen ServerSocket JComboBox JT extArea JTextField UserLinkList ServerReceive textarea JTextArea userLinkList UserLinkList isStop public Boolean ServerListen ServerSocket JComboBox JT extArea JTextField UserLinkList 聊天室服务器 端口服务启动服务 聊天室客户端用户设置登录 连接设置 聊天 退出 2 3 12 3 1 聊天室服务器端设计聊天室服务器端设计 聊天室服务端主要包括 4 个文件 它们的功能如下 1 AppServer java 服务器端进行监听客户端进行服务器的启动 以及 端客户进行处理用户退出 2 ServerFrame 为服务器端管理界面 负责用户帐号信息保存和用户在 线的状态和相关服务器端口的信息以及访问的方式 3 serverChat java 负责对用户信息的处理包括公聊和私聊的信息的发 送以及将聊天信息的序列化对象填加到保存聊天信息的记事本中 2 3 22 3 2 聊天室客户端设计聊天室客户端设计 聊天室客户端主要包括 6 个文件 其主要功能如下 ActionListen er ChatClient port public static in serverSocket ServerSocket messageShow JTextArea userLinkList UserLinkList showStatus JTextField ChatClient public init public void Connect public void DisConnect public void SendMessage public void JFrame ClientReceive socket Socket output ObjectOutputStream input ObjectInputStream ClientReceive Socket ObjectOutputStream ObjectInputStream JComboBox JTextArea JTe xtField Thread 1 ChatClient java 为客户端程序启动类 负责客户端的启动和退出 2 Login java 为客户端程序登录界面 负责用户帐号信息的验证与反馈 3 Register java 为客户端程序注册界面 负责用户帐号信息的注册验证 与反馈 4 ChatRoom java 为客户端程序聊天室主界面 负责接收 发送聊天内容 与服务器端的 Connection java 亲密合作 5 Windowclose 为 ChatRoom java 的内部类 负责监听聊天室界面的操作 当用户退出时返回给服务器信息 6 Clock java 为客户端程序的一个小程序 实现的一个石英钟功能 第三章第三章 主要程序代码和界面展示主要程序代码和界面展示 3 1 服务器端启动代码和界面服务器端启动代码和界面 3 1 13 1 1 服务器启动代码服务器启动代码 public class AppServer extends Thread private ServerSocket serverSocket private ServerFrame sFrame private static Vector userOnline new Vector 1 1 private static Vector v new Vector 1 1 创建服务器 启动服务监听 8888 端口 public AppServer sFrame new ServerFrame try serverSocket new ServerSocket 8888 获取服务器的主机名和 IP 地址 InetAddress address InetAddress getLocalHost sFrame txtServerName setText address getHostName sFrame txtIP setText address getHostAddress sFrame txtPort setText 8888 catch IOException e fail e 不能启动服务 sFrame txtStatus setText 已启动 this start 启动线程 退出服务器 退出消息 public static void fail Exception e String str System out println str e 监听客户的请求 当有用户请求时创建 Connection 线程 public void run try while true 监听并接受客户的请求 Socket client serverSocket accept new Connection sFrame client userOnline v 支持多线程 System out println userLength userLength atch IOException e fail e 不能监听 服务器 public static void main String args new AppServer 3 1 23 1 2 服务器启动界面服务器启动界面 服务器登录界面图 4 1 2 3 2 注册主要代码及界面注册主要代码及界面 3 2 13 2 1 注册主要代码注册主要代码 public class Register extends JFrame implements ActionListener private JComboBox comboBox private static final long serialVersionUID L JPanel pnlRegister JLabel lblUserName lblGender lblAge JLabel lblPassword lblConfirmPass lblEmail logoPosition JTextField txtUserName txtAge txtEmail JPasswordField pwdUserPassword pwdConfirmPass JRadioButton rbtnMale rbtnFemale ButtonGroup btngGender JButton btnOk btnCancel btnClear String strServerIp final JLabel headLabel new JLabel 用于将窗口用于定位 Dimension scrnsize Toolkit toolkit Toolkit getDefaultToolkit 构造方法 public Register String ip super HappyChat 聊天室注册窗口 strServerIp ip pnlRegister new JPanel this getContentPane add pnlRegister lblUserName new JLabel 用 户 名 lblGender new JLabel 性 别 lblAge new JLabel 年 龄 lblPassword new JLabel 密 码 lblConfirmPass new JLabel 确认密码 lblEmail new JLabel 电子邮件 txtUserName new JTextField 30 txtEmail new JTextField 30 txtAge new JTextField 10 pwdUserPassword new JPasswordField 30 pwdConfirmPass new JPasswordField 30 rbtnMale new JRadioButton 男 true rbtnFemale new JRadioButton 女 btngGender new ButtonGroup btnOk new JButton 确定 O btnOk setMnemonic O btnOk setToolTipText 保存注册信息 btnCancel new JButton 返回 B btnCancel setMnemonic B btnCancel setToolTipText 返回登录窗口 btnClear new JButton 清空 L btnClear setMnemonic L btnClear setToolTipText 清空注册信息 按钮注册监听 btnOk addActionListener this btnCancel addActionListener this btnClear addActionListener this final JLabel label new JLabel label setText 头 像 label setBounds 30 120 60 15 pnlRegister add label comboBox new JComboBox comboBox setAutoscrolls true comboBox setModel new DefaultComboBoxModel new String 1 2 comboBox setBounds 110 116 47 23 comboBox addItemListener new ItemListener public void itemStateChanged ItemEvent arg0 Icon logo new ImageIcon face comboBox getSelectedItem toString jpg TODO 自动生成方法存根 headLabel setIcon logo pnlRegister add comboBox headLabel setHorizontalAlignment SwingConstants CENTER setIcon SwingResourceManager getIcon Register class face 1 jpg headLabel setIcon new ImageIcon face 1 JPG headLabel setBounds 247 88 74 72 pnlRegister add headLabel 构造方法结束 按钮监听响应 public void actionPerformed ActionEvent ae Object source new Object source ae getSource if source equals btnOk 确定 按钮 register if source equals btnCancel 返回 按钮 new Login this dispose if source equals btnClear 清空 按钮 txtUserName setText pwdUserPassword setText pwdConfirmPass setText txtAge setText txtEmail setText actionPerformed 结束 确定 按钮事件响应 SuppressWarnings deprecation static access public void register 接受客户的详细资料 Register Customer data new Register Customer data custName txtUserName getText data custPassword pwdUserPassword getText data age txtAge getText data sex rbtnMale isSelected 男 女 data email txtEmail getText chenmin data head comboBox getSelectedItem toString 验证用户名是否为空 if data custName length 0 JOptionPane showMessageDialog null 用户名不能为空 return 验证密码是否为空 if data custPassword length 0 JOptionPane showMessageDialog null 密码不能为空 return 验证密码的一致性 if data custPassword equals pwdConfirmPass getText JOptionPane showMessageDialog null 密码两次输入不一致 请重新输入 return 验证年龄是否为空 if data age length 0 JOptionPane showMessageDialog null 年龄不能为空 return 验证年龄的合法性 int age Integer parseInt txtAge getText if age100 JOptionPane showMessageDialog null 年龄输入不合法 return 验证 Email 的正确性 int Found flag 0 判断标志 for int i 0 i data email length i if data email charAt i Found flag if Found flag 1 JOptionPane showMessageDialog null 电子邮箱格式不正 确 请重新输入 return try 连接到服务器 Socket toServer toServer new Socket strServerIp 8888 ObjectOutputStream streamToServer new ObjectOutputStream toServer getOutputStream 写客户详细资料到服务器 socket streamToServer writeObject Register Customer data 读来自服务器 socket 的登陆状态 BufferedReader fromServer new BufferedReader new InputStreamReader toServer getInputStream String status fromServer readLine 显示成功消息 JOptionPane op new JOptionPane op showMessageDialog null status if status equals data custName 注册成功 txtUserName setText pwdUserPassword setText pwdConfirmPass setText txtAge setText txtEmail setText 关闭流对象 streamToServer close fromServer close catch InvalidClassException e1 JOptionPane showMessageDialog null 类错误 catch NotSerializableException e2 JOptionPane showMessageDialog null 对象未序列化 catch IOException e3 JOptionPane showMessageDialog null 不能写入到指定服务器 方法 register 结束 public static void main String args new Register 127 0 0 1 class Register 结束 3 2 23 2 2 注册界面注册界面 3 3 登录主要代码和界面登录主要代码和界面 3 3 13 3 1 登录代码登录代码 public class Login extends JFrame implements ActionListener private static final long serialVersionUID L private JPanel pnlLogin private JButton btnLogin btnRegister btnExit private JLabel lblServer lblUserName lblPassword lblLogo private JTextField txtUserName txtServer private JPasswordField pwdPassword private String strServerIp 用于将窗口定位 private Dimension scrnsize private Toolkit toolkit Toolkit getDefaultToolkit public Login super 登录 HappyChat 聊天室 pnlLogin new JPanel this getContentPane add pnlLogin lblServer new JLabel 服务器 S lblUserName new JLabel 用户名 U lblPassword new JLabel 密 码 P txtServer new JTextField 20 txtServer setText 127 0 0 1 txtUserName new JTextField 20 pwdPassword new JPasswordField 20 btnLogin new JButton 登录 L btnLogin setToolTipText 登录到服务器 btnLogin setMnemonic L btnRegister new JButton 注册 R btnRegister setToolTipText 注册新用户 btnRegister setMnemonic R btnExit new JButton 退出 X btnExit setToolTipText 退出系统 btnExit setMnemonic X 3 3 23 3 2 登录界面登录界面 登录界面图 4 1 3 3 4 聊天主要代码和界面聊天主要代码和界面 3 4 13 4 1 主要代码主要代码 public class ChatRoom extends Thread implements ActionListener private JComboBox daXiaoComboBox private JComboBox yangShiComboBox private JComboBox zitiComboBox private JComboBox emote static JFrame frmChat JPanel pnlChat JButton btnCls btnExit btnSend btnClear btnSave btnTimer JLabel lblUserList lblUserMessage lblSendMessage lblChatUser JLabel lblUserTotal lblCount lblBack JTextField txtMessage java awt List lstUserList TextArea taUserMessage JComboBox cmbUser JCheckBox chPrivateChat String strServerIp strLoginName Thread thread final JLabel headLabel new JLabel 用于将窗口用于定位 Dimension scrnsize Toolkit toolkit Toolkit getDefaultToolkit Message messobj null String serverMessage final JSlider blueSlider new JSlider final JSlider redSlider new JSlider final JSlider greenSlider new JSlider final JLabel hanziLabel new JLabel 构造方法 public ChatRoom String name String ip Dialog d new FontDialog strServerIp ip strLoginName name frmChat new JFrame 聊天室 用户 name pnlChat new JPanel frmChat setDefaultCloseOperation JFrame EXIT ON CLOSE frmChat getContentPane add pnlChat Font fntDisp1 new Font 宋体 Font PLAIN 12 String list 所有人 btnCls new JButton 清屏 C btnExit new JButton 退出 X btnSend new JButton 发送 N btnSave new JButton 保存 S btnTimer new JButton 时钟 T lblUserList new JLabel 在线用户列表 lblUserMessage new JLabel 聊天信息 lblSendMessage new JLabel 聊天内容 lblChatUser new JLabel 你对 lblUserTotal new JLabel 在线人数 lblCount new JLabel 0 lstUserList new java awt List txtMessage new JTextField 170 cmbUser new JComboBox list chenmin cmbUser addItemListener new ItemListener public void itemStateChanged ItemEvent arg0 freshHead chPrivateChat new JCheckBox 私聊 taUserMessage new TextArea 300 200 TextArea SCROLLBARS VERTICAL ONLY 只能向下滚动 taUserMessage setText aaaaaa 汉字 aaaa taUserMessage setForeground new Color 0 0 0 taUserMessage setEditable false 不可写入 监听按钮响应 public void actionPerformed ActionEvent ae Object source Object ae getSource if source equals btnTimer new Clock if source equals btnCls clearMessage if source equals btnExit exit if source equals btnSend sendMessage if source equals btnSave saveMessage if source equals lstUserList 双击列表框 changeUser actionPerformed 结束 监听窗口关闭响应 class Windowclose extends WindowAdapter public void windowClosing WindowEvent e exit 清屏 按钮 public void clearMessage taUserMessage setText 退出 按钮 public void exit Exit exit new Exit exit exitname strLoginName 发送退出信息 try Socket toServer new Socket strServerIp 8888 向服务器发送信息 ObjectOutputStream outObj new ObjectOutputStream toServer getOutputStream outObj writeObject exit outObj close toServer close frmChat dispose this destroy catch Exception e exit 结束 发送 按钮 public void sendMessage Chat chatobj new Chat chatobj chatUser strLoginName chatobj chatMessage txtMessage getText chatobj chatToUser String valueOf cmbUser getSelectedItem chatobj whisper chPrivateChat isSelected true false chatobj emote emote getSelectedItem toString 向服务器发送信息 try Socket toServer new Socket strServerIp 8888 ObjectOutputStream outObj new ObjectOutputStream toServer getOutputStream outObj writeObject chatobj txtMessage setText 清空文本框 outObj close toServer
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 艾梅乙护理培训
- 二零二五年度服装店员工劳动合同电子版范本
- 2025版股权投资及投资决策与风险控制合同
- 二零二五年工厂食堂环境卫生保洁承包合同范本
- 二零二五年度高压电线销售服务协议
- 2025版安置房房票买卖贷款提前还款合同
- 二零二五年股权期权登记与管理合同范本
- 二零二五年度智能化家居产品居间服务不可撤销合同模板
- 2025版个人房贷还款合同收据模板
- 2025版电子信息产业合作研发技术保密与市场竞争协议
- 幕墙作业安全技术交底
- 中医耳针技术
- 混凝土板底疏松修补方案
- 小型文化传媒公司财务管理制度
- 山东省第二届化学分析检验人员行业职业技能竞赛理论试题库资料(含答案)
- 人教版数学一年级(上册)知识点全
- 孕产妇健康管理服务规范
- AQ 1097-2014 井工煤矿安全设施设计编制导则(正式版)
- NBT 47013.13-2015 承压设备无损检测 第13部分:脉冲涡流检测
- 2024年三亚市海棠区营商环境建设局一级科员招录1人《行政职业能力测验》高频考点、难点(含详细答案)
- 2024-2030年中国培南类抗菌药物行业市场运行态势及发展战略研究报告
评论
0/150
提交评论