java课程设计聊天小程序
- 格式:doc
- 大小:277.50 KB
- 文档页数:17
1、使用图形用户界面。
2、能实现一个聊天室中多人聊天。
3、可以两人私聊。
设计思路
与
设计过程
思路与原理:服务器端接受客户端的连接请求,同时启动一个线程处理这个连接,线程不停的读取客户端输入,然后把输入加入队列中,等候处理。在线程启动的同时将线程加入队列中,以便在需要的时候定位和取出。
过程:首先设计ChatServer服务端与ChatClinet客户端
System.out.println("读取流数据错误!!");
delSocket();
return;
}
System.out.println(msg);
msg=msgForward(msg);//处理读取的数据
if(msg.startsWith("#")==true){//若有系统提示返回,则返回系统提示
System.out.println(socket.getInetAddress()+"断开连接!!");
}
catch(IOException closeError){}
}
private void noticeAddUser(){//通告所有线程的客户端,本用户进入
String msg="##"+this.nick;
br=new BufferedReader(isr);
}
catch(IOException inOutError){
System.out.println("无法与客户建立流!!");
delSocket();
return;
}
do{
try{
msg=br.readLine();
}
catch(IOException readError){
noticeAddUser();//以及请求其他有用户信息
clientVector.add(this);
requestAllUser();
firstRead=false;
}
else{
msg="#您输入的昵称已经存在,请重新输入:";//昵称存在,发送系统提示
}
return msg;
}
if(msg.startsWith("!")==true){//若客户端发送密语
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)
if(clientVector.get(i).nick.equals(msg)==true)
break;
if(i>=clientVector.size()){//昵称不存在则:
nick=msg;//在clientVector中添加本线程信息
msg="#您使用的昵称:"+msg;//并通告所有线程的客户端,本用户进入
客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。
主要功能:1、实现服务端与客户端的连接,实现两者之间的信息交换。
2、实现了一个服务器可以与多个客户端实现连接,即实现了一个聊天室里面可以多人聊天。
name="610665c2a05631a7bc460993bae36ee6";//此name为特殊值,专指全体聊天
}
if(name.equals("610665c2a05631a7bc460993bae36ee6")==false){//若为密语
int i=0;
for(;i<clientVector.size();i++)//查找目的客户线程在clientVector中的位置
3、亦可以实现私聊的功能。
设计思路与框图:服务器端接受客户端的连接请求,同时启动一个线程处理这个连接,线程不停的读取客户端输入,然后把输入加入队列中,等候处理。在线程启动的同时将线程加入队列中,以便在需要的时候定位和取出。
大概的框图:
chatServer端chatclient端
︳
创建ServerSocket对象在某
Socket tempSocket=clientVector.get(index).socket;//index为客户在clientVector中位置
try{
PrintWriter pw=new PrintWriter(tempSocket.getOutputStream(),true);
pw.println(msg);
}
catch(IOException printError){}
}
public void run(){//建立读写流
String msg=null;
InputStreamReader isr=null;
BufferedReader br=null;
try{
isr=new InputStreamReader(socket.getInputStream());
}
}
else{//为全体聊天,全体转发
int i=0;
for(;i<clientVector.size();i++)
sendMsg(i,tempMsg);
}
return msg;
}
private void sendMsg(int index,String msg){//向特定客户转发,msg为转发信息
private Socket socket;//存放每个线程的Socket对象
String nick;//存放每个线程的昵称
private boolean firstRead;//用于判断是否为第一次接收数据
SocketThread(Socket s){//构造函数
socket=s;
nick=null;
设计目的与要求:目的是为了更好的掌握java这门课程的内容,同时更好的理解与掌握socket编程,对所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,掌握Java语言编程技巧。要求使用图形用户界面。能实现一个聊天室中多人聊天。可以两人私聊。(提示:使用socket通信)程序描述清晰准确,思路清晰,程序能够实现相应的功能。
计划与进度
计划在两个月内完成任务,首先在前半个月内(11月4日--11月19日),构思通过网上(图书馆)的知识与课本上的相关内容的了解与认识,确认好选择的课题与怎样设计,基本的思路想好。十五天(11月19日--12月5日)内参考资料争取完成服务端的程序,在12月5日--12月20日完成客户端的程序设计,在12月20日—12月30日内完成实现报告的填写工作。在12月31日全面完成整个课题,并上交给老师。
}
}
private String msgForward(String msg){//对接收到的信息转发
String name;//存放目的用户昵称
String tempMsg;//存放生成的转发数据
if(firstRead==true){//若为第一次收到数据
int i;
for(i=0;i<clientVector.size();i++)//检查昵称是否存在
client的通信等待其他的请求
关闭ServerSocket对象结束
监听服务
设计过程(步骤)或程序代码(可以加页):
主要代码:服务端ChatServer
class SocketThread extends Thread{//线程类,用于和每个客户端连接
static Vector<SocketThread> clientVector=new>();//存放每个线程信息
设计环境或器材、原理与说明、主要完成的功能、设计思路和框图:
设计环境或者器材:j d k或者j c编辑器,笔记本电脑两台,网线三条,小型交换机一个。
原理与说明:建立服务端与客户端的一个或者多个连接,其中服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
1、服务器(ChatServer),使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
2、客户端(ChatClinet),使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。(具体详细的过程步骤及代码见下面)
课程设计指导书
姓
名
宣红东
宛立生
学
号
09838024
09838027
班
级
一
班
课程名称
Java课程设计
课程性质
设计时间
2010年11月4日——2010年12月31日
设计名称
聊天小程序