java课程设计聊天小程序解析

上传人:101****457 文档编号:100214823 上传时间:2019-09-22 格式:DOC 页数:17 大小:299.35KB
返回 下载 相关 举报
java课程设计聊天小程序解析_第1页
第1页 / 共17页
java课程设计聊天小程序解析_第2页
第2页 / 共17页
java课程设计聊天小程序解析_第3页
第3页 / 共17页
java课程设计聊天小程序解析_第4页
第4页 / 共17页
java课程设计聊天小程序解析_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《java课程设计聊天小程序解析》由会员分享,可在线阅读,更多相关《java课程设计聊天小程序解析(17页珍藏版)》请在金锄头文库上搜索。

1、课程设计指导书姓 名宣红东宛立生学 号0983802409838027班 级一班课程名称Java课程设计课程性质设计时间 2010年 11月4日 2010年12月31日设计名称聊天小程序设计目的本次课程设计是对前面学过的面向对象的编程思想以及编程方法的一个总结、回顾和实践。开始设计前学生一定要先回顾以前所学的内容,明确本次设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。通过编写一个基于JAVA的应用系统综合实例,来掌握Java语言编程技巧。设计要求1、使用图形用户界面。2、能实现一个聊天室中多人聊天。3、可以两人私聊。设计思路与设计过程思路与原理:服务器端接受客户端的连接请求,同

2、时启动一个线程处理这个连接,线程不停的读取客户端输入,然后把输入加入队列中,等候处理。在线程启动的同时将线程加入队列中,以便在需要的时候定位和取出。过程:首先设计ChatServer服务端与ChatClinet客户端 1、 服务器(ChatServer),使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。2、 客户端(ChatClinet),使用Socket对网络上某一个服务器的 某一个端口发出连接请求,一旦连接成

3、功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。(具体详细的过程步骤及代码见下面) 计划与进度计划在两个月内完成任务,首先在前半个月内(11月4日-11月19日),构思通过网上(图书馆)的知识与课本上的相关内容的了解与认识,确认好选择的课题与怎样设计,基本的思路想好。十五天(11月19日-12月5日)内参考资料争取完成服务端的程序,在12月5日-12月20日完成客户端的程序设计,在12月20日12月30日内完成实现报告的填写工作。在12月31日全面完成整个课题,并上交给老师。任课教师意 见备 注课程设计报告课程:学号:姓名:

4、班级教师:时间计算机科学与技术设计名称:聊天小程序日期: 2010年 11月 4 日 设计内容:设计一个在图形界面下,实现一个聊天室中多人聊天,也可以私聊的聊天小程序设计目的与要求:目的是为了更好的掌握java这门课程的内容,同时更好的理解与掌握socket编程,对所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,掌握Java语言编程技巧。要求使用图形用户界面。能实现一个聊天室中多人聊天。可以两人私聊。(提示:使用socket通信)程序描述清晰准确,思路清晰,程序能够实现相应的功能。设计环境或器材、原理与说明、主要完成的功能、设计思路和框图:设计环境或者器材:j d k或者j c编辑器

5、,笔记本电脑两台,网线三条,小型交换机一个。原理与说明: 建立服务端与客户端的一个或者多个连接,其中服务器,使用Server Socket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。主要功能:1、实现服务端与客户端的连接,实现两者之间的信息

6、交换。 2、实现了一个服务器可以与多个客户端实现连接,即实现了一个聊天室里面可以多人聊天。 3、亦可以实现私聊的功能。设计思路与框图:服务器端接受客户端的连接请求,同时启动一个线程处理这个连接,线程不停的读取客户端输入,然后把输入加入队列中,等候处理。在线程启动的同时将线程加入队列中,以便在需要的时候定位和取出。大概的框图: chatServer端 chatclient端 创建ServerSocket对象在某 端口提供监听服务 等待来自chartclient的服务请求接受chartclient端的请求用 建立连接 创建Socket对象向server的监听端返回的Socket建立连接 口请求 通

7、过向Socket中读写数据来 数据通信 通过向新的Socket中读写数据来与chartclient端通信 与server端通信 关闭Socket结束与当前的 拆除连接 关闭Socket结束与server的通信client的通信等待其他的请求关闭ServerSocket对象结束监听服务设计过程(步骤)或程序代码(可以加页):主要代码:服务端ChatServerclass SocketThread extends Thread/线程类,用于和每个客户端连接static Vector clientVector=new Vector();/存放每个线程信息private Socket socket;/

8、存放每个线程的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;iclientVector.size();i+)if(clientVector.get(i).nick.equals(this.nick)=false)sendM

9、sg(i,msg);private void delSocket()/关闭socketnoticeDelUser();/通告所有线程的客户端,本用户退出clientVector.remove(this);/从clientVector中移除本线程trysocket.close();System.out.println(socket.getInetAddress()+断开连接!);catch(IOException closeError)private void noticeAddUser()/通告所有线程的客户端,本用户进入String msg=#+this.nick;for(int i=0;i

10、clientVector.size();i+)sendMsg(i,msg);private void requestAllUser()/本线程请求其他有用户信息int index=0;int i=0;for(i=0;iclientVector.size();i+)if(clientVector.get(i).nick.equals(this.nick)break;index=i;for(i=0;iclientVector.size();i+)if(index!=i)String msg=#+clientVector.get(i).nick;sendMsg(index,msg);private

11、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=

12、false;elsemsg=#您输入的昵称已经存在,请重新输入:;/昵称存在,发送系统提示return msg;if(msg.startsWith(!)=true)/若客户端发送密语name=msg.substring(1, msg.indexOf( );/获得目的用户昵称,生成发送信息tempMsg=this.nick+悄悄对+name+说:rnt+msg.substring(msg.indexOf( );elsetempMsg=this.nick+:rnt+msg;/若为全体聊天name=610665c2a05631a7bc460993bae36ee6;/此name为特殊值,专指全体聊天if(name.equals(610665c2a05631a7bc460993bae36ee6)=false)/若为密语int i=0;for(;iclientVector.size();i+)/查找目的客户线程在clientVector中的位置if(clientVector.get(i).nick.equals(name)=true)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号