欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    韩顺平java视频案例(山寨版QQ)源代码.doc

    • 资源ID:2387659       资源大小:142KB        全文页数:27页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    韩顺平java视频案例(山寨版QQ)源代码.doc

    文库里没有关于山寨QQ的java的源代码,只能看了视频整理自己写了,特免费分享。文档说明:根据java教学视频韩顺平.循序渐进学.java.从入门到精通(第8794讲)整理得源相关代码。代码调试无误,下载后调试有误的可评论留言联系。image中图片附录在源代码后面。工程文件夹:(源代码)/* * 这是客户端连接服务器的后台 */package com.qq.client.model;import com.qq.client.tools.*;import java.util.*;import .*;import java.io.*;import mon.*;public class QqClientConServer public Socket s;/发送第一次请求public boolean sendLoginInfoToServer(Object o)boolean b=false;try /System.out.println("kk");s=new Socket("127.0.0.1",9988);ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream();oos.writeObject(o);ObjectInputStream ois=new ObjectInputStream(s.getInputStream();Message ms=(Message)ois.readObject();/这里就是验证用户登录的地方if(ms.getMesType().equals("1")/就创建一个该qq号和服务器端保持通讯连接得线程ClientConServerThread ccst=new ClientConServerThread(s);/启动该通讯线程ccst.start();ManageClientConServerThread.addClientConServerThread(User)o).getUserId(), ccst);b=true;else/关闭Scokets.close(); catch (Exception e) e.printStackTrace();/ TODO: handle exceptionfinallyreturn b;public void SendInfoToServer(Object o)/*try Socket s=new Socket("127.0.0.1",9999); catch (Exception e) e.printStackTrace();/ TODO: handle exceptionfinally*/package com.qq.client.model;import mon.*;public class QqClientUser public boolean checkUser(User u)return new QqClientConServer().sendLoginInfoToServer(u);/* * 这是客户端和服务器端保持通讯的线程. */package com.qq.client.tools;import java.io.*;import .*;import com.qq.client.view.QqChat;import com.qq.client.view.QqFriendList;import mon.*;public class ClientConServerThread extends Thread private Socket s;/构造函数public ClientConServerThread(Socket s)this.s=s;public void run()while(true)/不停的读取从服务器端发来的消息try ObjectInputStream ois=new ObjectInputStream(s.getInputStream();Message m=(Message)ois.readObject();System.out.println("读取到从服务发来的消息"+ m.getSender() +" 给 "+m.getGetter()+" 内容"+m.getCon();if(m.getMesType().equals(MessageType.message_comm_mes)/把从服务器获得消息,显示到该显示的聊天界面QqChat qqChat=ManageQqChat.getQqChat(m.getGetter()+" "+m.getSender();/显示qqChat.showMessage(m);else if(m.getMesType().equals(MessageType.message_ret_onLineFriend)System.out.println("客户端接收到"+m.getCon();String con=m.getCon();String friends=con.split(" ");String getter=m.getGetter();System.out.println("getter="+getter);/修改相应的好友列表.QqFriendList qqFriendList=ManageQqFriendList.getQqFriendList(getter);/if(qqFriendList)/更新在线好友.if(qqFriendList!=null)qqFriendList.upateFriend(m); catch (Exception e) e.printStackTrace();/ TODO: handle exceptionpublic Socket getS() return s;public void setS(Socket s) this.s = s;/* * 这是一个管理客户端和服务器保持通讯的线程类 */package com.qq.client.tools;import java.util.*;public class ManageClientConServerThread private static HashMap hm=new HashMap<String, ClientConServerThread>();/把创建好的ClientConServerThread放入到hmpublic static void addClientConServerThread(String qqId,ClientConServerThread ccst)hm.put(qqId, ccst);/可以通过qqId取得该线程 public static ClientConServerThread getClientConServerThread(String qqId)return (ClientConServerThread)hm.get(qqId);/* * 这是一个管理用户聊天界面的类 */package com.qq.client.tools;import java.util.*;import com.qq.client.view.*;public class ManageQqChat private static HashMap hm=new HashMap<String, QqChat>();/加入public static void addQqChat(String loginIdAnFriendId,QqChat qqChat)hm.put(loginIdAnFriendId, qqChat);/取出public static QqChat getQqChat(String loginIdAnFriendId )return (QqChat)hm.get(loginIdAnFriendId);/* * 管理好友、黑名单.界面类 */package com.qq.client.tools;import java.util.*;import java.io.*;import com.qq.client.view.*;public class ManageQqFriendList private static HashMap hm=new HashMap<String, QqFriendList>();public static void addQqFriendList(String qqid,QqFriendList qqFriendList)hm.put(qqid, qqFriendList);public static QqFriendList getQqFriendList(String qqId)return (QqFriendList)hm.get(qqId);/* * 这是与好友聊天的界面 * 因为客户端,要处于读取的状态,因此我们把它做成一个线程 */package com.qq.client.view;import com.qq.client.tools.*;import com.qq.client.model.*;import mon.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;public class QqChat extends JFrame implements ActionListenerJTextArea jta;JTextField jtf;JButton jb;JPanel jp;String ownerId;String friendId;public static void main(String args) / TODO Auto-generated method stub/QqChat qqChat=new QqChat("1");public QqChat(String ownerId,String friend)this.ownerId=ownerId;this.friendId=friend;jta=new JTextArea();jtf=new JTextField(15);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(ownerId+" 正在和 "+friend+" 聊天");this.setIconImage(new ImageIcon("image/qq.gif").getImage();this.setSize(300, 200);this.setVisible(true);/写一个方法,让它显示消息public void showMessage(Message m)String info=m.getSender()+" 对 "+m.getGetter()+" 说:"+m.getCon()+"rn"this.jta.append(info);public void actionPerformed(ActionEvent arg0) / TODO Auto-generated method stubif(arg0.getSource()=jb)/如果用户点击了,发送按钮Message m=new Message();m.setMesType(MessageType.message_comm_mes); /!最后一步m.setSender(this.ownerId);m.setGetter(this.friendId);m.setCon(jtf.getText();m.setSendTime(new java.util.Date().toString();/发送给服务器.try ObjectOutputStream oos=new ObjectOutputStream(ManageClientConServerThread.getClientConServerThread(ownerId).getS().getOutputStream();oos.writeObject(m); catch (Exception e) e.printStackTrace();/ TODO: handle exception/public void run() / TODO Auto-generated method stub/while(true)/try /读取如果读不到就等待./ObjectInputStream ois=new ObjectInputStream(QqClientConServer.s.getInputStream();/Message m=(Message)ois.readObject();/显示/String info=m.getSender()+" 对 "+m.getGetter()+" 说:"+m.getCon()+"rn"/this.jta.append(info);/ catch (Exception e) /e.printStackTrace();/ TODO: handle exception/* * 功能:qq客户端登录界面 */package com.qq.client.view;import mon.*;import com.qq.client.tools.*;import java.io.*;import javax.swing.*;import com.qq.client.model.QqClientUser;import mon.User;import java.awt.*;import java.awt.event.*;public class QqClientLogin extends JFrame implements ActionListener/定义北部需要的组件JLabel jbl1;/定义中部需要的组件/.中部有三个JPanel,有一个叫选项卡窗口管理JTabbedPane jtp;JPanel jp2,jp3,jp4;JLabel jp2_jbl1,jp2_jbl2,jp2_jbl3,jp2_jbl4;JButton jp2_jb1;JTextField jp2_jtf;JPasswordField jp2_jpf;JCheckBox jp2_jcb1,jp2_jcb2;/定义南部需要的组件JPanel jp1;JButton jp1_jb1,jp1_jb2,jp1_jb3;public static void main(String args) / TODO Auto-generated method stubQqClientLogin qqClientLogin=new QqClientLogin();public QqClientLogin()/处理北部jbl1=new JLabel(new ImageIcon("image/tou.gif");/处理中部jp2=new JPanel(new GridLayout(3,3);jp2_jbl1=new JLabel("QQ号码",JLabel.CENTER);jp2_jbl2=new JLabel("QQ密码",JLabel.CENTER);jp2_jbl3=new JLabel("忘记密码",JLabel.CENTER);jp2_jbl3.setForeground(Color.blue);jp2_jbl4=new JLabel("申请密码保护",JLabel.CENTER);jp2_jb1=new JButton(new ImageIcon("image/clear.gif");jp2_jtf=new JTextField();jp2_jpf=new JPasswordField();jp2_jcb1=new JCheckBox("隐身登录");jp2_jcb2=new JCheckBox("记住密码");/把控件按照顺序加入到jp2jp2.add(jp2_jbl1);jp2.add(jp2_jtf);jp2.add(jp2_jb1);jp2.add(jp2_jbl2);jp2.add(jp2_jpf);jp2.add(jp2_jbl3);jp2.add(jp2_jcb1);jp2.add(jp2_jcb2);jp2.add(jp2_jbl4);/创建选项卡窗口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/denglu.gif");/响应用户点击登录jp1_jb1.addActionListener(this);jp1_jb2=new JButton(new ImageIcon("image/quxiao.gif");jp1_jb3=new JButton(new ImageIcon("image/xiangdao.gif");/把三个按钮放入到jp1jp1.add(jp1_jb1);jp1.add(jp1_jb2);jp1.add(jp1_jb3);this.add(jbl1,"North");this.add(jtp,"Center");/.把jp1放在南部this.add(jp1,"South");this.setSize(350, 240);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);public void actionPerformed(ActionEvent arg0) / TODO Auto-generated method stub/如果用户点击登录if(arg0.getSource()=jp1_jb1)QqClientUser qqClientUser=new QqClientUser();User u=new User();u.setUserId(jp2_jtf.getText().trim();u.setPasswd(new String(jp2_jpf.getPassword();if(qqClientUser.checkUser(u)try /把创建好友列表的语句提前.QqFriendList qqList = new QqFriendList(u.getUserId();ManageQqFriendList.addQqFriendList(u.getUserId(), qqList);/发送一个要求返回在线好友的请求包.ObjectOutputStream oos=new ObjectOutputStream(ManageClientConServerThread.getClientConServerThread(u.getUserId().getS().getOutputStream();/做一个MessageMessage m=new Message();m.setMesType(MessageType.message_get_onLineFriend);/指明我要的是这个qq号的好友情况.m.setSender(u.getUserId();oos.writeObject(m); catch (Exception e) e.printStackTrace();/ TODO: handle exception/关闭掉登录界面this.dispose();elseJOptionPane.showMessageDialog(this,"用户名密码错误");/* * 我的好友列表,(也包括陌生人,黑名单) */package com.qq.client.view;import com.qq.client.tools.*;import mon.Message;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class QqFriendList extends JFrame implements ActionListener,MouseListener/处理第一张卡片.JPanel jphy1,jphy2,jphy3;JButton jphy_jb1,jphy_jb2,jphy_jb3;JScrollPane jsp1;String owner;/处理第二张卡片(陌生人).JPanel jpmsr1,jpmsr2,jpmsr3;JButton jpmsr_jb1,jpmsr_jb2,jpmsr_jb3;JScrollPane jsp2;JLabel jb1s;/把整个JFrame设置成CardLayoutCardLayout cl;public static void main(String args) / TODO Auto-generated method stub/QqFriendList qqFriendList=new QqFriendList();/更新在线的好友情况public void upateFriend(Message m)String onLineFriend=m.getCon().split(" ");for(int i=0;i<onLineFriend.length;i+)jb1sInteger.parseInt(onLineFriendi)-1.setEnabled(true);public QqFriendList(String ownerId)this.owner=ownerId;/处理第一张卡片(显示好友列表)jphy_jb1=new JButton("我的好友");jphy_jb2=new JButton("陌生人");jphy_jb2.addActionListener(this);jphy_jb3=new JButton("黑名单");jphy1=new JPanel(new BorderLayout();/假定有50个好友jphy2=new JPanel(new GridLayout(50,1,4,4);/给jphy2,初始化50好友.jb1s =new JLabel50;for(int i=0;i<jb1s.length;i+)jb1si=new JLabel(i+1+"",new ImageIcon("image/mm.jpg"),JLabel.LEFT);jb1si.setEnabled(false);if(jb1si.getText().equals(ownerId)jb1si.setEnabled(true);jb1si.addMouseListener(this);jphy2.add(jb1si);jphy3=new JPanel(new GridLayout(2,1);/把两个按钮加入到jphy3jphy3.add(jphy_jb2);jphy3.add(jphy_jb3);jsp1=new JScrollPane(jphy2);/对jphy1,初始化jphy1.add(jphy_jb1,"North");jphy1.add(jsp1,"Center");jphy1.add(jphy3,"South");/处理第二张卡片jpmsr_jb1=new JButton("我的好友");jpmsr_jb1.addActionListener(this);jpmsr_jb2=new JButton("陌生人");jpmsr_jb3=new JButton("黑名单");jpmsr1=new JPanel(new BorderLayout();/假定有20个陌生人jpmsr2=new JPanel(new GridLayout(20,1,4,4);/给jphy2,初始化20陌生人.JLabel jb1s2=new JLabel20;for(int i=0;i<jb1s2.length;i+)jb1s2i=new JLabel(i+1+"",new ImageIcon("image/mm.jpg"),JLabel.LEFT);jpmsr2.add(jb1s2i);jpmsr3=new JPanel(new GridLayout(2,1);/把两个按钮加入到jphy3jpmsr3.add(jpmsr_jb1);jpmsr3.add(jpmsr_jb2);jsp2=new JScrollPane(jpmsr2);/对jphy1,初始化jpmsr1.add(jpmsr3,"North");jpmsr1.add(jsp2,"Center");jpmsr1.add(jpmsr_jb3,"South");cl=new CardLayout();this.setLayout(cl);this.add(jphy1,"1");this.add(jpmsr1,"2");/在窗口显示自己的编号.this.setTitle(ownerId);this.setSize(250, 600);this.setVisible(true);public void actionPerformed(ActionEvent arg0) / TODO Auto-generated method stub/如果点击了陌生人按钮,就显示第二张卡片if(arg0.getSource()=jphy_jb2)cl.show(this.getContentPane(), "2");else if(arg0.getSource()=jpmsr_jb1)cl.show(this.getContentPane(), "1");public void mouseClicked(MouseEvent arg0) / TODO Auto-generated method stub/响应用户双击的事件,并得到好友的编号.if(arg0.getClickCount()=2)/得到该好友的编号String friendNo=(JLabel)arg0.getSource().getText();/System.out.println("你希望和 "+friendNo+" 聊天");QqChat qqChat=new QqChat(this.owner,friendNo);/把聊天界面加入到管理类ManageQqChat.addQqChat(this.owner+" "+friendNo, qqChat);public void mouseEntered(MouseEvent arg0) / TODO Auto-generated method stubJLabel jl=(JLabel)arg0.getSource();jl.setForeground(Color.red);public void mouseExited(MouseEvent arg0) / TODO Auto-generated method stubJLabel jl=(JLabel)arg0.getSource();jl.setForeground(Color.black);public void mousePressed(MouseEvent arg0) / TODO Auto-generated method stubpublic void mouseReleased(MouseEvent arg0) / TODO Auto-generated method stubpackage mon;public class Message implements java.io.Serializableprivate String mesType;private String sender;private String getter;private String con;private String sendTime;public Str

    注意事项

    本文(韩顺平java视频案例(山寨版QQ)源代码.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开