山寨QQ(韩顺平版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这是一个简单的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.png
QqClientConService类:
package com.qq.client.model;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import .Socket;
import com.qq.client.tools.ClientConServerThread;
import com.qq.client.tools.ManageClientConServerThread; import mon.Message;
import er;
/**
* 客户端连接服务器后台
* */
public class QqClientConService {
public Socket client;
//判断是否成功登录,成功返回true,否则返回false
public boolean sendLoginInfoToServer(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.readObject();
//登录成功的判断
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) {
e.printStackTrace();
}
return isLogin;
}
}
QqClientUser类:
package com.qq.client.model;
import er;
/**
* 这是QQ客户端,发送用户名和密码
*
* */
public class QqClientUser {
//调用客户端连接服务器后台的方法,返回true为成功登录,false为登入失败
public boolean checkUser(User user) {
return new
QqClientConService().sendLoginInfoToServer(user);
}
}
ClientConServerThread类:
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;
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() ==
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) {