山寨QQ(韩顺平版)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

这是一个简单的javaProject项目,没有涉及到数据库界面对这个项目中完成的功能进行阐述:1、qq用户登录:用户账号为1、2、3一直到50,密码都为123456,由于没有涉及到数据库,所以只是简单的在服务器进行验证。2、实现1对1之间的聊天,实现1对多之间的聊天。3、实现用户上线显示功能具体的演示为:1、启动服务器QqServer下com.qq.view.MyServerFrame,在该类下面启动服务器2、启动客户端QqClient下com.qq.view.QqClientLogin,在该类下面输入账号和密码登入ps:聊天时要把要把需要聊天的窗口都打开,才能看到。比如1和2聊天,必须打开1对2聊天的窗口和2对1聊天的窗口QQ客户端:QQ服务器下面的是关于各个包的源代码,小伙伴们可以新建一个class,然后把这些拷贝上去就可以用了,当然前提是按照上面的工程创建好包Image文件夹下用到的图片:命名为:beibu.gif命名为:xiangdao.png命名为:quxiao.png命名为:qq.png命名为:mm.png命名为:clear.png命名为:dengru.pngQqClientConService类:packagecom.qq.client.model;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.net.Socket;importcom.qq.client.tools.ClientConServerThread;importcom.qq.client.tools.ManageClientConServerThread;importcom.qq.common.Message;importcom.qq.common.User;/***客户端连接服务器后台**/publicclassQqClientConService{publicSocketclient;//判断是否成功登录,成功返回true,否则返回falsepublicbooleansendLoginInfoToServer(Objecto){booleanisLogin=false;try{//创建连接client=newSocket(localhost,9999);ObjectOutputStreamoos=newObjectOutputStream(client.getOutputStream());oos.writeObject(o);ObjectInputStreamois=newObjectInputStream(client.getInputStream());Messagemessage=(Message)ois.readObject();//登录成功的判断if(message.getMesType()==1){isLogin=true;//登录成功,创建一个改客户端和服务器的线程ClientConServerThreadccst=newClientConServerThread(client);//把改线程添加到管理线程的map中ManageClientConServerThread.addClientConServerThread(((User)o).getName(),ccst);//启动该线程newThread(ccst).start();}}catch(Exceptione){e.printStackTrace();}returnisLogin;}}QqClientUser类:packagecom.qq.client.model;importcom.qq.common.User;/***这是QQ客户端,发送用户名和密码***/publicclassQqClientUser{//调用客户端连接服务器后台的方法,返回true为成功登录,false为登入失败publicbooleancheckUser(Useruser){returnnewQqClientConService().sendLoginInfoToServer(user);}}ClientConServerThread类:packagecom.qq.client.tools;importjava.io.ObjectInputStream;importjava.net.Socket;importcom.qq.client.view.QqChar;importcom.qq.client.view.QqFriendList;importcom.qq.common.Message;importcom.qq.common.MessageType;/***这是客户端和服务器保持通讯的线程**/publicclassClientConServerThreadimplementsRunnable{publicSocketclient;publicClientConServerThread(Socketclient){this.client=client;}@Overridepublicvoidrun(){//不停的读取从服务器发来的消息while(true){try{ObjectInputStreamois=newObjectInputStream(client.getInputStream());Messagemessage=(Message)ois.readObject();//判断发来的消息包是否为普通消息包,或者是返回在线好友的包if(message.getMesType()==MessageType.message_common_mes){//把从服务器发来的消息显示在聊天界面:1.从管理聊天窗口的类中取得该窗口2.调用显示方法.QqCharqqChar=ManageQqChar.getQqChar(message.getGetter()++message.getSender());qqChar.showMessage(message);}elseif(message.getMesType()==MessageType.message_ret_onLineFriend){Stringgetter=message.getGetter();//修改响应的好友列表QqFriendListqqFriendList=ManageQqFriendList.getQqFriendList(getter);//更新在线好友if(qqFriendList!=null){qqFriendList.updateFriend(message);}}}catch(Exceptione){e.printStackTrace();}}}}ManageClientConServerThread类:packagecom.qq.client.tools;importjava.util.HashMap;importjava.util.Map;/***这是一个管理客户端和服务器保持通讯的线程类**/publicclassManageClientConServerThread{publicstaticMapmap=newHashMapString,ClientConServerThread();//把线程添加到map中publicstaticvoidaddClientConServerThread(StringuserName,ClientConServerThreadccst){map.put(userName,ccst);}//根据用户名取得该线程publicstaticClientConServerThreadgetClientConServerThread(StringuserName){return(ClientConServerThread)map.get(userName);}}ManageQqChar类:packagecom.qq.client.tools;importjava.util.HashMap;importjava.util.Map;importcom.qq.client.view.QqChar;/***这是一个管理用户聊天界面的类**/publicclassManageQqChar{publicstaticMapmap=newHashMapString,QqChar();//把用户聊天界面Qqchar添加到map中publicstaticvoidaddQqChar(StringloginAndFriend,QqCharqqchar){map.put(loginAndFriend,qqchar);}//根据登入用户和发送用户取得该聊天界面publicstaticQqChargetQqChar(StringloginAndFriend){return(QqChar)map.get(loginAndFriend);}}ManageQqFriendList类:packagecom.qq.client.tools;importjava.util.HashMap;importjava.util.Map;importcom.qq.client.view.QqFriendList;/***管理好友、黑名单..界面类**/publicclassManageQqFriendList{publicstaticMapmap=newHashMapString,QqFriendList();//把用用户列表类添加到map中publicstaticvoidaddQqFriendList(StringuserName,QqFriendListlist){map.put(userName,list);}//根据登录用户取得该用户列表类publicstaticQqFriendListgetQqFriendList(StringuserName){return(QqFriendList)map.get(userName);}}QqChar类:packagecom.qq.client.view;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.ObjectOutputStream;importjava.util.Date;importjavax.swing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JTextArea;importjavax.swing.JTextField;importcom.qq.client.tools.ManageClientConServerThread;importcom.qq.common.Message;importcom.qq.common.MessageType;/***QQ聊天窗口***/publicclassQqCharextendsJFrameimplementsActionListener{JTextFieldjtf;//输入的文本框JTextAreajta;//文本区域JButtonjb;//发送按钮JPaneljp;//装文本框和发送按钮的panelStringfriend;StringuserName;publicstaticvoidmain(String[]args){QqCharqqChar=newQqChar(1,2);}publicQqChar(StringuserName,Stringfriend){this.userName=userName;this.friend=friend;jtf=newJTextField(15);jta=newJTextArea();jb=n

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功