1、山寨版QQ源代码关于山寨QQ的java的源代码Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。文库里没有关于山寨QQ的java的源代码,只能看了视频整理自己写了,特免费分享。文档说明:根据
2、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 bo
3、olean 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
4、(); /这里就是验证用户登录的地方 if(ms.getMesType().equals(1) /就创建一个该qq号和服务器端保持通讯连接得线程 ClientConServerThread ccst=new ClientConServerThread(s); /启动该通讯线程 ccst.start(); ManageClientConServerThread.addClientConServerThread (User)o).getUserId(), ccst); b=true; else /关闭Scoket s.close(); catch (Exception e) e.printStac
5、kTrace(); / TODO: handle exception finally return b; public void SendInfoToServer(Object o) /*try Socket s=new Socket(127.0.0.1,9999); catch (Exception e) e.printStackTrace(); / TODO: handle exception finally */ package com.qq.client.model;import mon.*;public class QqClientUser public boolean checkU
6、ser(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
7、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.get
8、MesType().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
9、 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:
10、 handle exception public 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(); /把创建好的ClientConServerThread放入到hm public static void ad
11、dClientConServerThread(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.c
12、lient.view.*;public class ManageQqChat private static HashMap hm=new HashMap(); /加入 public static void addQqChat(String loginIdAnFriendId,QqChat qqChat) hm.put(loginIdAnFriendId, qqChat); /取出 public static QqChat getQqChat(String loginIdAnFriendId ) return (QqChat)hm.get(loginIdAnFriendId); /* * 管理好
13、友、黑名单.界面类 */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(); public static void addQqFriendList(String qqid,QqFriendList qqFriendList) hm.put(qqid, qqFriendList); public static QqFrien
14、dList 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.*;publ
15、ic class QqChat extends JFrame implements ActionListener JTextArea 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.ownerI
16、d=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).get
17、Image(); 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 stub if(arg0.getSource()=jb) /如果用户
18、点击了,发送按钮 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.g
19、etClientConServerThread(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
20、.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
21、.*;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,有一个叫选项卡窗口管理 JTa
22、bbedPane 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 stub QqCli
23、entLogin 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.setFore
24、ground(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(记住密码); /把控件按照顺序加入到jp2 jp2.add(jp2_jbl1); jp2.add(jp2_jtf); jp2.add(jp2_jb1);
25、 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(im
26、age/denglu.gif); /响应用户点击登录 jp1_jb1.addActionListener(this); jp1_jb2=new JButton(new ImageIcon(image/quxiao.gif); jp1_jb3=new JButton(new ImageIcon(image/xiangdao.gif); /把三个按钮放入到jp1 jp1.add(jp1_jb1); jp1.add(jp1_jb2); jp1.add(jp1_jb3); this.add(jbl1,North); this.add(jtp,Center); /.把jp1放在南部 this.add(j
27、p1,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()
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1