ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:67.20KB ,
资源ID:7789023      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7789023.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(山寨QQ韩顺平版.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

山寨QQ韩顺平版.docx

1、山寨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、和2聊天,必须打开1对2聊天的窗口和2对1聊天的窗口QQ客户端:QQ服务器下面的是关于各个包的源代码,小伙伴们可以新建一个class,然后把这些拷贝上去就可以用了,当然前提是按照上面的工程创建好包Image文件夹下用到的图片: 命名为:beibu.gif 命名为:xiangdao.png 命名为:quxiao.png 命名为:qq.png 命名为:mm.png 命名为:clear.png 命名为:dengru.pngQqClientConService类:package com.qq.client.model;import java.io.ObjectInputStream;import ja

3、va.io.ObjectOutputStream;import .Socket;import com.qq.client.tools.ClientConServerThread;import com.qq.client.tools.ManageClientConServerThread;import mon.Message;import mon.User;/* * 客户端连接服务器后台 * */public class QqClientConService public Socket client; /判断是否成功登录,成功返回true,否则返回false public boolean sen

4、dLoginInfoToServer(Object o) boolean isLogin = false; try /创建连接 client = new Socket(localhost, 9999); ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream(); oos.writeObject(o); ObjectInputStream ois = new ObjectInputStream(client.getInputStream(); Message message = (Message)ois.re

5、adObject(); /登录成功的判断 if(message.getMesType()=1) isLogin = true; /登录成功,创建一个改客户端和服务器的线程 ClientConServerThread ccst = new ClientConServerThread(client); /把改线程添加到管理线程的map中 ManageClientConServerThread.addClientConServerThread(User)o).getName(), ccst); /启动该线程 new Thread(ccst).start(); catch (Exception e)

6、e.printStackTrace(); return isLogin; QqClientUser类:package com.qq.client.model;import mon.User;/* * 这是QQ客户端,发送用户名和密码 * * */public class QqClientUser /调用客户端连接服务器后台的方法,返回true为成功登录,false为登入失败 public boolean checkUser(User user) return new QqClientConService().sendLoginInfoToServer(user); ClientConServe

7、rThread类:package com.qq.client.tools;import java.io.ObjectInputStream;import .Socket;import com.qq.client.view.QqChar;import com.qq.client.view.QqFriendList;import mon.Message;import mon.MessageType;/* * 这是客户端和服务器保持通讯的线程 * */public class ClientConServerThread implements Runnable public Socket client

8、; public ClientConServerThread(Socket client) this.client = client; Override public void run() /不停的读取从服务器发来的消息 while(true) try ObjectInputStream ois = new ObjectInputStream(client.getInputStream(); Message message = (Message) ois.readObject(); /判断发来的消息包是否为普通消息包,或者是返回在线好友的包 if(message.getMesType() =

9、MessageType.message_common_mes) /把从服务器发来的消息显示在聊天界面:1.从管理聊天窗口的类中取得该窗口 2.调用显示方法. QqChar qqChar = ManageQqChar.getQqChar(message.getGetter()+ +message.getSender(); qqChar.showMessage(message); else if(message.getMesType() = MessageType.message_ret_onLineFriend) String getter = message.getGetter(); /修改响

10、应的好友列表 QqFriendList qqFriendList = ManageQqFriendList.getQqFriendList(getter); /更新在线好友 if(qqFriendList != null) qqFriendList.updateFriend(message); catch (Exception e) e.printStackTrace(); ManageClientConServerThread类:package com.qq.client.tools;import java.util.HashMap;import java.util.Map;/* * 这是一

11、个管理客户端和服务器保持通讯的线程类 * */public class ManageClientConServerThread public static Map map = new HashMap(); /把线程添加到map中 public static void addClientConServerThread(String userName, ClientConServerThread ccst) map.put(userName, ccst); /根据用户名取得该线程 public static ClientConServerThread getClientConServerThrea

12、d(String userName) return (ClientConServerThread)map.get(userName); ManageQqChar类:package com.qq.client.tools;import java.util.HashMap;import java.util.Map;import com.qq.client.view.QqChar;/* * 这是一个管理用户聊天界面的类 * */public class ManageQqChar public static Map map = new HashMap(); /把用户聊天界面Qqchar添加到map中

13、public static void addQqChar(String loginAndFriend, QqChar qqchar) map.put(loginAndFriend, qqchar); /根据登入用户和发送用户取得该聊天界面 public static QqChar getQqChar(String loginAndFriend) return (QqChar)map.get(loginAndFriend); ManageQqFriendList类:package com.qq.client.tools;import java.util.HashMap;import java.u

14、til.Map;import com.qq.client.view.QqFriendList;/* * 管理好友、黑名单.界面类 * */public class ManageQqFriendList public static Map map = new HashMap(); /把用用户列表类添加到map中 public static void addQqFriendList(String userName, QqFriendList list) map.put(userName, list); /根据登录用户取得该用户列表类 public static QqFriendList getQq

15、FriendList(String userName) return (QqFriendList)map.get(userName); QqChar类:package com.qq.client.view;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.ObjectOutputStream;import java.util.Date;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.s

16、wing.JFrame;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;import com.qq.client.tools.ManageClientConServerThread;import mon.Message;import mon.MessageType;/* * QQ聊天窗口 * * */public class QqChar extends JFrame implements ActionListener JTextField jtf;/输入的文本框 JTex

17、tArea jta;/文本区域 JButton jb;/发送按钮 JPanel jp;/装 文本框 和 发送按钮 的panel String friend; String userName; public static void main(String args) QqChar qqChar = new QqChar(1,2); public QqChar(String userName,String friend) this.userName = userName; this.friend = friend; jtf = new JTextField(15); jta = new JText

18、Area(); jb = new JButton(发送); jb.addActionListener(this); jp = new JPanel(); jp.add(jtf); jp.add(jb); this.add(jta, Center); this.add(jp, South); this.setTitle(userName+ 正在和 + friend + 聊天); this.setIconImage(new ImageIcon(image/qq.png).getImage(); this.setSize(300, 200); this.setVisible(true); publi

19、c void showMessage(Message message) String info=message.getSender()+ 对 +message.getGetter()+ 说:+message.getContext()+rn; this.jta.append(info); Override public void actionPerformed(ActionEvent e) /当点击发送按钮时,把消息发送到服务器端 if(e.getSource() = jb) Message message = new Message(); message.setMesType(MessageT

20、ype.message_common_mes); message.setSender(userName); message.setGetter(friend); message.setContext(jtf.getText(); jtf.setText(); message.setTime(new Date().toString(); try ObjectOutputStream oos = new ObjectOutputStream(ManageClientConServerThread.getClientConServerThread(userName).client.getOutput

21、Stream(); oos.writeObject(message); catch (Exception e1) e1.printStackTrace(); QqClientLogin类:import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTabbedPane;import javax.swing.JTextField;import com.qq.client.model.Q

22、qClientUser;import com.qq.client.tools.ManageClientConServerThread;import com.qq.client.tools.ManageQqFriendList;import mon.Message;import mon.MessageType;import mon.User;/* * QQ客户端登入窗口 * * */public class QqClientLogin extends JFrame implements ActionListener /定义北部组件 JLabel jbl1; /定义中部组件:其中中部组件有一个选项

23、卡的窗口管理,有三个JPanel,一个文本框,一个密码框,4个JLabel,一个清除号码按钮,两个多选框 JTabbedPane jtp;/选项卡窗口 JPanel jp2;/QQ号码 JPanel jp3;/手机号码 JPanel jp4;/电子邮件 JLabel jp2_jpl1;/QQ号码 JLabel jp2_jpl2;/QQ密码 JLabel jp2_jpl3;/忘记密码 JLabel jp2_jpl4;/申请密码保护 JButton jp2_jb1;/清除号码 JTextField jp2_jtf;/文本框 JPasswordField jp2_jpf;/密码框 JCheckBox

24、 jp2_jcb1;/隐身登入 JCheckBox jp2_jcb2;/记住密码 /定义南部组件 JPanel jp1; JButton jp1_jb1;/登入按钮 JButton jp1_jb2;/取消按钮 JButton jp1_jb3;/注册向导按钮 public static void main(String args) QqClientLogin qqClientLogin=new QqClientLogin(); public QqClientLogin() /处理北部的组件 jbl1 = new JLabel(new ImageIcon(image/beibu.gif); /处理

25、中部的组件 jp2=new JPanel(new GridLayout(3,3);/把中部分成三行三列 jp2_jpl1 = new JLabel(QQ号码, JLabel.CENTER); jp2_jpl2 = new JLabel(QQ密码, JLabel.CENTER); jp2_jpl3 = new JLabel(忘记密码, JLabel.CENTER); jp2_jpl3.setForeground(Color.blue);/把忘记密码设为蓝色 jp2_jpl4 = new JLabel(申请密码保护, JLabel.CENTER); jp2_jb1 = new JButton(ne

26、w ImageIcon(image/clear.png); jp2_jtf = new JTextField(); jp2_jpf = new JPasswordField(); jp2_jcb1 = new JCheckBox(隐身登入); jp2_jcb2 = new JCheckBox(记住密码); /把控件按照顺序加入到jp2 jp2.add(jp2_jpl1); jp2.add(jp2_jtf); jp2.add(jp2_jb1); jp2.add(jp2_jpl2); jp2.add(jp2_jpf); jp2.add(jp2_jpl3); jp2.add(jp2_jcb1); j

27、p2.add(jp2_jcb2); jp2.add(jp2_jpl4); /创建选项卡窗口,把三个JPanel放进去,最后把选项卡放进JFrame中 jtp=new JTabbedPane(); jtp.add(QQ号码,jp2); jp3= new JPanel(); jtp.add(手机号码,jp3); jp4=new JPanel(); jtp.add(电子邮件,jp4); /处理南部的组件 jp1 = new JPanel(); jp1_jb1 = new JButton(new ImageIcon(image/dengru.png); jp1_jb1.addActionListene

28、r(this); jp1_jb2 = new JButton(new ImageIcon(image/quxiao.png); jp1_jb3 =new JButton(new ImageIcon(image/xiangdao.png); /把三个按钮放进jp1中 jp1.add(jp1_jb1); jp1.add(jp1_jb2); jp1.add(jp1_jb3); /把定义好的组件放入到JFrame中 this.add(jbl1,North);/放入北部组件 this.add(jp1, South);/放入南部组件 this.add(jtp, Center);/放入中部组件 /定义JFrame的一些属性 this.setSize(350, 240); this.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1