当前位置:文档之家› 网络课程设计实验报告--QQ聊天实现

网络课程设计实验报告--QQ聊天实现

计算机网络课程设计报告设计选题网络聊天室姓名马继鸣学号 0909090630完成时间 2012-1-12 一、需求分析聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客户机/服务器架构模式。

通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能。

用多线程可完成多点对多点的聊天。

主要有两个应用程序,分别为服务器程序和客户端程序。

服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。

采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。

聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。

该聊天系统实现群聊,用户登陆,退出聊天系统等功能。

二. 设计1.设计思想:课程设计中利用JAVA实现基于C/S模式的聊天程序。

聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户发来的消息,客户端登录到服务器端才可以实现正常的聊天功能。

2.功能设计(1)服务器端的主要功能如下。

在特定端口上进行侦听,等待客户端连接。

用户可以配置服务端的侦听端口,默认端口为10000.当停止服务时,断开所有用户连接。

(2)客户端的主要功能如下。

连接到已经开启聊天服务的服务端。

当服务器端开启的话,用户可以随时登录与注销。

用户可以向所有人发送消息。

3.详细设计聊天室服务器端设计聊天室服务器中主要的功能文件的功能如下:MyButLis.java主要用于添加事件侦听和动作处理,具体是服务器按钮中的“终止”“发送”的处理。

public class MyButLis implements ActionListenerprivate MyServe server;private JTextField filed1;public void actionPerformed(ActionEvent e)MyChatSet.java服务器的线程队列,运行的方法,新增一个用户,则增加一个线程,并可以返回应答消息,给其余用户发送上下线信息,发送聊天信息(群聊私聊虽然已写,但是不知为何没有实现),发送用户列表。

关键在于除了线程之外,还定义了传输数据时的协议内容,如何分辨不同的信息,如聊天信息,登陆信息,上下线信息,并把信息完整准确的传递。

public static ArrayList<MyserThread> servers=new ArrayList<MyserThread>();//线程队列public static void addThread(MyserThread th) //增加一个服务器线程对象public static void sendReMess(String type,String state,String s,MyserThread myth)//返回应答信息public static void SendOSMess(String type,String user)//其他用户上下线信息public static void SendChatMess(String type,String sender,String reciver,String Mess)//聊天信息public static void SendList//用户列表MyCheckTool.java保存用户的登陆信息,在其中建立一个码表,并且可以判断登陆信息是否合法。

//建立码表,用以保存用户信息private static Map<String, MyUserInfo> maps=new HashMap<String, MyUserInfo>();public static boolean CheckUser(MyUserInfo user)// 验证用户名MyFrame.java建立服务器的主界面,关联侦听器。

并启动线程。

MyFrame my=new MyFrame();my.ShowUI();// 显示UI界面public void ShowUI()server.SetUP();MyserThread.java服务器线程类,定义输入输出流,发送读取信息,获取信息中相应标签的信息,用以判断用户名,密码,并可以中断连接。

this.socket=socket;output=socket.getOutputStream();input=socket.getInputStream();public void SendMess(String s)//发送信息public String ReadMess() //读取信息public boolean ReadFirst()//将第一条信息读出来public String GetValue(String type ,String Mess)public void Pocess()//用以判断用户名、密码public void run()//线程开始public MyUserInfo getUser()//获得该线程中的用户信息MyServe.java建立服务器,并启动该线程。

server=new ServerSocket(inport);Socket sc=server.accept();//获得socket对象MyserThread th=new MyserThread(sc);th.start(); //启动线程客户端中主要的功能文件概述如下:MyButLis.java主要用于添加事件侦听和动作处理,具体是在客户端中的登陆注册发送等的处理。

public MyButLis(MySocketChat socket,JTextArea area1,JTextArea area2,MyLoginUI loginUI,JComboBox box)public void actionPerformed(ActionEvent e) //设置动作监听器MyChatFrame.java客户端的图形界面。

关联侦听器。

并启动线程。

socket.setArea(area1);socket.start()MyLoginUI.java登陆界面MySocketChat.java构建连接,截取字符串,发送登陆,注册,聊天信息,读取信息并判断设置启动线程方法。

public MySocketChat(JTextField field1,JTextField field2,JTextArea area)//重写构造函数public String GetValue(String type ,String Mess) //截取字符串public void SendMess(String type)// 发送登陆或者注册信息public void SendChat(String getter,String chat)// 发送聊天消息public String ReadMess ()//读入的信息public void CheckMess(String Mess) //判断是什么消息public void run()//设置启动方法三. 调试及测试1、调试过程中遇到的主要问题及解决方法在对于群聊和私聊的处理中,只实现了群聊,私聊虽有写,但是还没有实现,由于时间仓促,只能在寒假的其余时间努力完成。

还有就是如何在服务器与客户端的信息交互过程中,让他们能分辨是哪种信息并准确的读出来。

如果不能准确的分析,则数据的交换只能完成一种粗略的互换,而不能提取聊天内容等用户希望得到的信息。

为此,我专门看了很多相关的资料,在很多方法里面选取了一种自己容易理解的方法,我就定义了几种方式,分别辨认登陆注册聊天列表等信息:"<msg><type>"+type+"</type>"+"<name>"+user+"</name>"+"<pwd>"+pwd+"</pwd></msg>";//第一个与最后一个msg是标示一整句话的标示符 type标示数据类型,两个<type>中间的type即为需求数据,两个<user>之间的是用户名称,两个<pwd>之间的pwd指的是密码"<msg><type>chat</type>"+"<sender>"+user+"</sender>"+"<reciver>"+gett er+"</reciver>"+"<content>"+chat+"</content></msg>";//其中sender,reciever,content分别指发送者、接受者、内容。

一些语法问题,在随着写程序的过程中,也慢慢纠正。

在服务器组建中,由于java对于网络连接强有力的支持和丰富的代码,让我没有遇到太难的问题。

2、对设计和编码的回顾讨论和分析在获取系统时间这一块上,还是做得比较好。

Calendar ca=Calendar.getInstance();Date da=new Date();// 注意是在java.util.DateSimpleDateFormat format=new SimpleDateFormat("HH:mm:ss");//设置时间格式da=ca.getTime();time=format.format(da);处理保存的注册信息时,可能做得不是很好,将hashmap写入文件,这样不能长期保存注册信息,只能在服务器不关闭的状态下,保存注册信息。

这个也会继续改进3、程序运行的时空效率分析本程序应用了线程对端口进行侦听。

线程一直后台开启,长期占用系统资源,但又能及时的实现端口监听和消息的收发。

4、测试数据集服务器端程序主界面:可以记录用户名,账号,IP地址,并可以发送系统消息客户登陆注册界面注册成功提示框客户端运行界面用户端测试界面中间的(全部)按钮,点击后可以显示当前在线的好友列表,并选择聊天对象四、经验和体会。

这是我第一次做java项目,只是这个学期选修了面向程序设计,每周一节课,很浅显的学习了java语言,在综合性如此强的项目设计中,感觉力不从心。

相关主题