




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计指导书 姓 名 宣红东 宛立生 学 号 班 级 一 班 课程名称Java 课程设计课程性质 设计时间 2010 年 11 月 4 日 2010 年 12 月 31 日 设计名称聊天小程序 设计目的 本次课程设计是对前面学过的面向对象的编程思想以及编 程方法的一个总结 回顾和实践 开始设计前学生一定要 先回顾以前所学的内容 明确本次设计所要用到的技术点 并到网上搜索以及查阅相关的书籍来搜集资料 通过编写 一个基于 JAVA 的应用系统综合实例 来掌握 Java 语言 编程技巧 设计要求 1 使用图形用户界面 2 能实现一个聊天室中多人聊天 3 可以两人私聊 设计思路 与 设计过程 思路与原理 服务器端接受客户端的连接请求 同时启动一个线 程处理这个连接 线程不停的读取客户端输入 然后把输入加入 队列中 等候处理 在线程启动的同时将线程加入队列中 以便 在需要的时候定位和取出 过程 首先设计 ChatServer 服务端与 ChatClinet 客户端 1 服务器 ChatServer 使用 ServerSocket 监听指定的端口 端口可以随意指定 由于 1024 以下的端口通常属于保留端口 在一些操作系统中不可以随意使用 所以建议使用大于 1024 的端口 等待客户连接请求 客户连接后 会话产生 在完 成会话后 关闭连接 2 客户端 ChatClinet 使用 Socket 对网络上某一个服务器的 某一个端口发出连接请求 一旦连接成功 打开会话 会话完 成后 关闭 Socket 客户端不需要指定打开的端口 通常临时 的 动态的分配一个 1024 以上的端口 具体详细的过程步 骤及代码见下面 计划与进度 计划在两个月内完成任务 首先在前半个月内 11 月 4 日 11 月 19 日 构思通过网上 图书馆 的知识与课本上的相关内容的了 解与认识 确认好选择的课题与怎样设计 基本的思路想好 十 五天 11 月 19 日 12 月 5 日 内参考资料争取完成服务端的程序 在 12 月 5 日 12 月 20 日完成客户端的程序设计 在 12 月 20 日 12 月 30 日内完成实现报告的填写工作 在 12 月 31 日全面完成 整个课题 并上交给老师 任课教师 意 见 备 注 课程设计报告课程设计报告 课程 Java 语言程序设计 学号 姓名 宣红东 宛立生 班级 一班 教师 范庆春 时间 2010 11 4 2010 12 31 计算机科学与技术 设计名称 聊天小程序设计名称 聊天小程序日期 日期 2010 年 11 月 4 日 设计内容 设计内容 设计一个在图形界面下 实现一个聊天室中多人聊天 也可以私聊的聊天小程 序 设计目的与要求 设计目的与要求 目的是为了更好的掌握 java 这门课程的内容 同时更好的理解与掌握 socket 编程 对所有面向对象的编程思想以及编程方法的一个总结 回顾和实践 掌握 Java 语言编程技巧 要求使用图形用户界面 能实现一个聊天室中多人聊天 可以两人私 聊 提示 使用 socket 通信 程序描述清晰准确 思路清晰 程序能够实现相应的功能 设计环境或器材 原理与说明 主要完成的功能 设计思路和框图 设计环境或器材 原理与说明 主要完成的功能 设计思路和框图 设计环境或者器材 j d k 或者 j c 编辑器 笔记本电脑两台 网线三条 小型交换机一个 原理与说明 建立服务端与客户端的一个或者多个连接 其中服务器 使用 Server Socket 监听指定的端口 端口可以随意指定 由于 1024 以下的端口通常属于保留端口 在一些操作系统中不可以随意使用 所以建议使用大于 1024 的端口 等待客户连接请求 客户连接后 会话产生 在完成会话后 关闭连接 客户端 使用 Socket 对网络上某一个服务器的某一个端口发出连接请求 一旦连接成 功 打开会话 会话完成后 关闭 Socket 客户端不需要指定打开的端口 通常临时的 动态的分配一个 1024 以上的端口 主要功能 1 实现服务端与客户端的连接 实现两者之间的信息交换 2 实现了一个服务器可以与多个客户端实现连接 即实现了一个聊天室里面可 以多人聊天 3 亦可以实现私聊的功能 设计思路与框图 服务器端接受客户端的连接请求 同时启动一个线程处理这个连接 线 程不停的读取客户端输入 然后把输入加入队列中 等候处理 在线程启动的同时将线程 加入队列中 以便在需要的时候定位和取出 大概的框图 chatServer 端 chatclient 端 创建 ServerSocket 对象在某 端口提供监听服务 等待来自 chartclient 的服务 请求 接受 chartclient 端的请求用 建立连接 创建 Socket 对象向 server 的监听 端 返回的 Socket 建立连接 口请求 通过向 Socket 中读写数据来 数据通信 通过向新的 Socket 中读写数据 来 与 chartclient 端通信 与 server 端通信 关闭 Socket 结束与当前的 拆除连接 关闭 Socket 结束与 server 的通 信 client 的通信等待其他的请求 关闭 ServerSocket 对象结束 监听服务 设计过程 步骤 或程序代码设计过程 步骤 或程序代码 可以加页可以加页 主要代码 服务端主要代码 服务端 ChatServer class SocketThread extends Thread 线程类线程类 用于和每个用于和每个 客户端连接客户端连接 static Vector clientVector new Vector 存放每个线存放每个线 程信息程信息 private Socket socket 存放每个线程的存放每个线程的 Socket 对象对象 String nick 存放每个线程的昵称存放每个线程的昵称 private boolean firstRead 用于判断是否为第一用于判断是否为第一 次接收数据次接收数据 SocketThread Socket s 构造函数构造函数 socket s nick null firstRead true private void noticeDelUser 通告所有线程的客户通告所有线程的客户 端端 本用户退出本用户退出 String msg this nick for int i 0 i clientVector size i if clientVector get i nick equals this nick false sendMsg i msg private void delSocket 关闭关闭 socket noticeDelUser 通告所有线程的客户通告所有线程的客户 端端 本用户退出本用户退出 clientVector remove this 从从 clientVector 中移中移 除本线程除本线程 try socket close System out println socket getInetAddress 断开连接 断开连接 catch IOException closeError private void noticeAddUser 通告所有线程的客户通告所有线程的客户 端端 本用户进入本用户进入 String msg this nick for int i 0 i clientVector size i sendMsg i msg private void requestAllUser 本线程请求其他有用本线程请求其他有用 户信息户信息 int index 0 int i 0 for i 0 i clientVector size i if clientVector get i nick equals this nick break index i for i 0 i clientVector size i if index i String msg clientVector get i nick sendMsg index msg private String msgForward String msg 对接收到的信息转发对接收到的信息转发 String name 存放目的用户昵称存放目的用户昵称 String tempMsg 存放生成的转发存放生成的转发 数据数据 if firstRead true 若为第一次收到数据若为第一次收到数据 int i for i 0 i clientVector size 昵称不存在则昵称不存在则 nick msg 在在 clientVector 中添加本线程信息中添加本线程信息 msg 您使用的昵称您使用的昵称 msg 并通告所有并通告所有 线程的客户端线程的客户端 本用户进入本用户进入 noticeAddUser 以及请求其他有用户以及请求其他有用户 信息信息 clientVector add this requestAllUser firstRead false else msg 您输入的昵称已经存在 请重新输入 您输入的昵称已经存在 请重新输入 昵称存昵称存 在在 发送系统提示发送系统提示 return msg if msg startsWith true 若客户端发送密语若客户端发送密语 name msg substring 1 msg indexOf 获得目的用户昵称获得目的用户昵称 生成生成 发送信息发送信息 tempMsg this nick 悄悄对悄悄对 name 说 说 r n t msg substring msg indexOf else tempMsg this nick r n t msg 若为全体聊天若为全体聊天 name c2a05631a7bcbae36ee6 此此 name 为特殊值为特殊值 专指全体专指全体 聊天聊天 if name equals c2a05631a7bcbae36ee6 false 若为密语若为密语 int i 0 for i clientVector size 若找不到目的客户线若找不到目的客户线 程程 则返回系统提示则返回系统提示 msg 您所发送的用户名昵称不存在 您所发送的用户名昵称不存在 else sendMsg i tempMsg 找到目的客户线找到目的客户线 程并转发程并转发 else 为全体聊天为全体聊天 全体转全体转 发发 int i 0 for i 则清除部分历史记录则清除部分历史记录 防止占防止占 用过大内存用过大内存 chatRecord setText chatRecord getText substring chatRecord getText indexOf r n 2 public void actionPerformed ActionEvent e 点击点击 sendButton 则则 发送信息发送信息 if e getSource sendButton sendMsg public void sendMsg 向服务器发送信息向服务器发送信息 if msgEditor null if friendList getSelectedIndex 0 发送全体聊天信息发送全体聊天信息 socketWriter println msgEditor getText else 发送密语发送密语 并回显并回显 socketWriter println friendList getSelectedItem toString msgEditor getText chatRecord append this nick 对对 friendList getSelectedItem toString 悄悄说 悄悄说 r n t msgEditor getText r n else 若发送信息为空若发送信息为空 则则 系统提示系统提示 chatRecord append 不能发送空消息不能发送空消息 r n msgEditor setText 将发送信息栏置空将发送信息栏置空 class ReceiveThread extends Thread 监视输入流的类监视输入流的类 Socket socket 连接服务器的连接服务器的 socket ClientWindows clientWindow 主窗口主窗口 ReceiveThread Socket s ClientWindows cw 初始化初始化 socket s clientWindow cw public void run String msg null BufferedReader br null try 建立输入流建立输入流 br new BufferedReader new InputStreamReader socket getInputStream catch IOException ReadError clientWindow setWelcome 读入流建立错误 程序关闭 读入流建立错误 程序关闭 try socket close clientWindow setWelcome 与服务器连接已经断开 与服务器连接已经断开 System exit 0 catch IOException closeError System exit 0 while true 读取数据流的信息读取数据流的信息 try msg br readLine 获得信息获得信息 catch IOException e try socket close clientWindow setWelcome 与服务器连接已经断开 与服务器连接已经断开 System exit 0 catch IOException closeError System exit 0 msg msgChange msg 转变读取到转变读取到 的信息的信息 if msg null clientWindow addNewMsg msg 向聊天窗口添加向聊天窗口添加 新聊天内容新聊天内容 private String msgChange String msg if msg startsWith 删除摸一个用户的信删除摸一个用户的信 息息 for int i 1 i clientWindow friendList getItemCount i if clientWindow friendList getItem i toString equals msg substring 3 clientWindow friendList remove i clientWindow friendList select 0 return null else if msg startsWith 增加某一个用户信息增加某一个用户信息 clientWindow friendList add msg substring 2 clientWindow friendList select 0 return null else if msg startsWith 系统提示系统提示 msg msg substring 1 if msg startsWith 您使用的昵称您使用的昵称 clientWindow nick msg substring 8 return msg 设计结果与分析设计结果与分析 可以加页可以加页 运行 ChatServer 服务端 运行 ChatClient 端的界面如下图 当打开两个或者多个客户端时 实现多人会话或者一对一的会话当打开两个或者多个客户端时 实现多人会话或者一对一的会话 界面如下图 界面如下图 私聊即点击想要私聊的用户名即可 私聊即点击想要私聊的用户名即可 设计体会与建议 设计体会与建议 该实验中运用到了一些以前没有了解的东西 首先是 Accept 方法用于产生 阻塞 直到接受到一个连接 并且返回一个客户端的 Socket 对 象 实例 阻塞 是一个术语 它使程序运行暂时 停留 在这个地方 直到一个会话产生 然 后 程序继续 通常 阻塞 是由循环产生的 getInputStream 方法获得网络
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东工程数学自考试题及答案
- 控制测量考试题及答案
- 2025年中国平烫机数据监测研究报告
- 四川省广元市川师大万达中学2025-2026学年高二上学期第一次月考(8月)英语试题(原卷版)
- 康复考试题型及答案
- 木材保护与改性处理工综合考核试卷及答案
- 钻车司机三级安全教育(车间级)考核试卷及答案
- 钒铁熔化还原工工艺创新考核试卷及答案
- 餐厨垃圾处理工职业技能考核试卷及答案
- 课件文本框汉字输入问题
- T-CNAS 10-2020 成人有创机械通气气道内吸引技术操作
- 《危险货物港口作业重大事故隐患判定标准》知识培训
- 农村废弃物综合利用资源化利用方式与路径
- 脑卒中的识别及预防与处理
- 和田玉知识培训课件下载
- 交互式游戏设计趋势-深度研究
- 2025年中国海洋功能性食品行业全景评估及投资规划建议报告
- 2025-2030年中国铷行业市场规模分析及投资前景研究报告
- 餐饮行业培训合作协议书
- 沪价费(2006)27号-关于调整本市部分绿化行政事业性收费标准的通知
- 水稻机械化种植技术-洞察分析
评论
0/150
提交评论