山寨QQ(韩顺平版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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) {

相关文档
最新文档