山寨版QQ源代码.docx
《山寨版QQ源代码.docx》由会员分享,可在线阅读,更多相关《山寨版QQ源代码.docx(39页珍藏版)》请在冰豆网上搜索。
山寨版QQ源代码
关于山寨QQ的java的源代码
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称。
Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
文库里没有关于山寨QQ的java的源代码,只能看了视频整理自己写了,特免费分享。
文档说明:
根据java教学视频《韩顺平.循序渐进学.java.从入门到精通》(第87~94讲)整理得源相关代码。
代码调试无误,下载后调试有误的可评论留言联系。
image中图片附录在源代码后面。
工程文件夹:
(源代码)
/**
*这是客户端连接服务器的后台
*/
packagecom.qq.client.model;
importcom.qq.client.tools.*;
importjava.util.*;
import.*;
importjava.io.*;
importmon.*;
publicclassQqClientConServer{
publicSockets;
//发送第一次请求
publicbooleansendLoginInfoToServer(Objecto)
{
booleanb=false;
try{
//System.out.println("kk");
s=newSocket("127.0.0.1",9988);
ObjectOutputStreamoos=newObjectOutputStream(s.getOutputStream());
oos.writeObject(o);
ObjectInputStreamois=newObjectInputStream(s.getInputStream());
Messagems=(Message)ois.readObject();
//这里就是验证用户登录的地方
if(ms.getMesType().equals("1"))
{
//就创建一个该qq号和服务器端保持通讯连接得线程
ClientConServerThreadccst=newClientConServerThread(s);
//启动该通讯线程
ccst.start();
ManageClientConServerThread.addClientConServerThread
(((User)o).getUserId(),ccst);
b=true;
}else{
//关闭Scoket
s.close();
}
}catch(Exceptione){
e.printStackTrace();
//TODO:
handleexception
}finally{
}
returnb;
}
publicvoidSendInfoToServer(Objecto)
{
/*try{
Sockets=newSocket("127.0.0.1",9999);
}catch(Exceptione){
e.printStackTrace();
//TODO:
handleexception
}finally{
}*/
}
}
packagecom.qq.client.model;
importmon.*;
publicclassQqClientUser{
publicbooleancheckUser(Useru)
{
returnnewQqClientConServer().sendLoginInfoToServer(u);
}
}
/**
*这是客户端和服务器端保持通讯的线程.
*/
packagecom.qq.client.tools;
importjava.io.*;
import.*;
importcom.qq.client.view.QqChat;
importcom.qq.client.view.QqFriendList;
importmon.*;
publicclassClientConServerThreadextendsThread{
privateSockets;
//构造函数
publicClientConServerThread(Sockets)
{
this.s=s;
}
publicvoidrun()
{
while(true)
{
//不停的读取从服务器端发来的消息
try{
ObjectInputStreamois=newObjectInputStream(s.getInputStream());
Messagem=(Message)ois.readObject();
System.out.println("读取到从服务发来的消息"+m.getSender()+"给"+m.getGetter()+"内容"+
m.getCon());
if(m.getMesType().equals(MessageType.message_comm_mes))
{
//把从服务器获得消息,显示到该显示的聊天界面
QqChatqqChat=ManageQqChat.getQqChat(m.getGetter()+""+m.getSender());
//显示
qqChat.showMessage(m);
}elseif(m.getMesType().equals(MessageType.message_ret_onLineFriend))
{
System.out.println("客户端接收到"+m.getCon());
Stringcon=m.getCon();
Stringfriends[]=con.split("");
Stringgetter=m.getGetter();
System.out.println("getter="+getter);
//修改相应的好友列表.
QqFriendListqqFriendList=ManageQqFriendList.getQqFriendList(getter);
////if(qqFriendList)
//更新在线好友.
if(qqFriendList!
=null)
{
qqFriendList.upateFriend(m);
}
}
}catch(Exceptione){
e.printStackTrace();
//TODO:
handleexception
}
}
}
publicSocketgetS(){
returns;
}
publicvoidsetS(Sockets){
this.s=s;
}
}
/**
*这是一个管理客户端和服务器保持通讯的线程类
*/
packagecom.qq.client.tools;
importjava.util.*;
publicclassManageClientConServerThread{
privatestaticHashMaphm=newHashMap();
//把创建好的ClientConServerThread放入到hm
publicstaticvoidaddClientConServerThread(StringqqId,ClientConServerThreadccst)
{
hm.put(qqId,ccst);
}
//可以通过qqId取得该线程
publicstaticClientConServerThreadgetClientConServerThread(StringqqId)
{
return(ClientConServerThread)hm.get(qqId);
}
}
/**
*这是一个管理用户聊天界面的类
*/
packagecom.qq.client.tools;
importjava.util.*;
importcom.qq.client.view.*;
publicclassManageQqChat{
privatestaticHashMaphm=newHashMap();
//加入
publicstaticvoidaddQqChat(StringloginIdAnFriendId,QqChatqqChat)
{
hm.put(loginIdAnFriendId,qqChat);
}
//取出
publicstaticQqChatgetQqChat(StringloginIdAnFriendId)
{
return(QqChat)hm.get(loginIdAnFriendId);
}
}
/**
*管理好友、黑名单..界面类
*/
packagecom.qq.client.tools;
importjava.util.*;
importjava.io.*;
importcom.qq.client.view.*;
publicclassManageQqFriendList{
privatestaticHashMaphm=newHashMap();
publicstaticvoidaddQqFriendList(Stringqqid,QqFriendListqqFriendList){
hm.put(qqid,qqFriendList);
}
publicstaticQqFriendListgetQqFriendList(StringqqId)
{
return(QqFriendList)hm.get(qqId);
}
}
/**
*这是与好友聊天的界面
*因为客户端,要处于读取的状态,因此我们把它做成一个线程
*/
packagecom.qq.client.view;
importcom.qq.client.tools.*;
importcom.qq.client.model.*;
importmon.*;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
publicclassQqChatextendsJFrameimplementsActionListener{
JTextAreajta;
JTextFieldjtf;
JButtonjb;
JPaneljp;
StringownerId;
StringfriendId;
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
//QqChatqqChat=newQqChat("1");
}
publicQqChat(StringownerId,Stringfriend)
{
this.ownerId=ownerId;
this.friendId=friend;
jta=newJTextArea();
jtf=newJTextField(15);
jb=newJButton("发送");
jb.addActionListener(this);
jp=newJPanel();
jp.add(jtf);
jp.add(jb);
this.add(jta,"Center");
this.add(jp,"South");
this.setTitle(ownerId+"正在和"+friend+"聊天");
this.setIconImage((newImageIcon("image/qq.gif").getImage()));
this.setSize(300,200);
this.setVisible(true);
}
//写一个方法,让它显示消息
publicvoidshowMessage(Messagem)
{
Stringinfo=m.getSender()+"对"+m.getGetter()+"说:
"+m.getCon()+"\r\n";
this.jta.append(info);
}
publicvoidactionPerformed(ActionEventarg0){
//TODOAuto-generatedmethodstub
if(arg0.getSource()==jb)
{
//如果用户点击了,发送按钮
Messagem=newMessage();
m.setMesType(MessageType.message_comm_mes);/////////////////////////////////////////!
!
最后一步
m.setSender(this.ownerId);
m.setGetter(this.friendId);
m.setCon(jtf.getText());
m.setSendTime(newjava.util.Date().toString());
//发送给服务器.
try{
ObjectOutputStreamoos=newObjectOutputStream
(ManageClientConServerThread.getClientConServerThread(ownerId).getS().getOutputStream());
oos.writeObject(m);
}catch(Exceptione){
e.printStackTrace();
//TODO:
handleexception
}
}
}
//
//publicvoidrun(){
////TODOAuto-generatedmethodstub
//while(true)
//{
//try{
////读取[如果读不到就等待.]
//ObjectInputStreamois=newObjectInputStream(QqClientConServer.s.getInputStream());
//
//Messagem=(Message)ois.readObject();
//
////显示
//Stringinfo=m.getSender()+"对"+m.getGetter()+"说:
"+m.getCon()+"\r\n";
//this.jta.append(info);
//
//
//
//}catch(Exceptione){
//e.printStackTrace();
////TODO:
handleexception
//}
//
//
//
//}
//
//}
}
/**
*功能:
qq客户端登录界面
*/
packagecom.qq.client.view;
importmon.*;
importcom.qq.client.tools.*;
importjava.io.*;
importjavax.swing.*;
importcom.qq.client.model.QqClientUser;
importmon.User;
importjava.awt.*;
importjava.awt.event.*;
publicclassQqClientLoginextendsJFrameimplementsActionListener{
//定义北部需要的组件
JLabeljbl1;
//定义中部需要的组件
//.中部有三个JPanel,有一个叫选项卡窗口管理
JTabbedPanejtp;
JPaneljp2,jp3,jp4;
JLabeljp2_jbl1,jp2_jbl2,jp2_jbl3,jp2_jbl4;
JButtonjp2_jb1;
JTextFieldjp2_jtf;
JPasswordFieldjp2_jpf;
JCheckBoxjp2_jcb1,jp2_jcb2;
//定义南部需要的组件
JPaneljp1;
JButtonjp1_jb1,jp1_jb2,jp1_jb3;
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
QqClientLoginqqClientLogin=newQqClientLogin();
}
publicQqClientLogin()
{
//处理北部
jbl1=newJLabel(newImageIcon("image/tou.gif"));
//处理中部
jp2=newJPanel(newGridLayout(3,3));
jp2_jbl1=newJLabel("QQ号码",JLabel.CENTER);
jp2_jbl2=newJLabel("QQ密码",JLabel.CENTER);
jp2_jbl3=newJLabel("忘记密码",JLabel.CENTER);
jp2_jbl3.setForeground(Color.blue);
jp2_jbl4=newJLabel("申请密码保护",JLabel.CENTER);
jp2_jb1=newJButton(newImageIcon("image/clear.gif"));
jp2_jtf=newJTextField();
jp2_jpf=newJPasswordField();
jp2_jcb1=newJCheckBox("隐身登录");
jp2_jcb2=newJCheckBox("记住密码");
//把控件按照顺序加入到jp2
jp2.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=newJTabbedPane();
jtp.add("QQ号码",jp2);
jp3=newJPanel();
jtp.add("手机号码",jp3);
jp4=newJPanel();
jtp.add("电子邮件",jp4);
//处理南部
jp1=newJPanel();
jp1_jb1=newJButton(newImageIcon("image/denglu.gif"));
//响应用户点击登录
jp1_jb1.addActionListener(this);
jp1_jb2=newJButton(newImageIcon("image/quxiao.gif"));
jp1_jb3=newJButton(newImageIcon("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(jp1,"South");
this.setSize(350,240);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicvoidactionPerformed(ActionEventarg0){
//TODOAuto-generatedmethodstub
//如果用户点击登录
if(arg0.getSource()==jp1_jb1)
{
QqClientUserqqClientUser=newQqClientUser();
Useru=newUser();
u.setUserId(jp2_jtf.getText()