Android版QQ实现附源码

本文介绍了一个基于Socket通信和多线程技术实现的QQ聊天系统的搭建过程。包括服务器端和客户端的配置步骤,如数据库初始化、服务器启动、客户端连接等,并解释了其工作原理。

运行步骤

QQServer端

1,使用mysql.sql文件创建数据库,修改DB.properties中密码为你设置的数据库的密码

mysql数据库默认编码应该设置为gbk

2,先启动Server

QQClient端

1,改ip

修改com.way.chat.common.util.Constants.SERVER_IP为你自己电脑的ip

查看ip,开始---运行---cmd(命令提示符)---ipconfig

2,运行客户端

真机测试时如果真机不能连接自己电脑上的服务器,先要关闭防火墙;

真机不能连接自己电脑的服务器的时候,可以使用模拟器测试

=============================================================================================

原理:socket通信+多线程

1,服务器QQServer开启了一个ServerSocket,等待客户端连接;

2,用户操作安卓客户端的时候,客户端QQClient创建一个Socket后去连接服务器,创建一个输出线程ClientOutputThread,将客户端的消息发送给服务器;

3,服务器使用InputThread接收用户发送的消息,根据消息的不同调用不同的代码进行消息处理(如登陆消息就验证用户名和密码,调用dao查询数据库,返回验证结果),处理完毕后,服务器将处理结果通过OutputThread发送给客户端;

4,客户端使用ClientInputThread接收服务器返回的结果,根据结果不同展现不同的界面(...登陆成功进入QQ主界面,验证失败给出用户名密码错误的界面)

=============================================================================================

客户端输出线程ClientOutputThread发消息后,会进入等待状态,直到下次用户操作后,再唤醒输出线程;

等待代码:

@Override
 public void run() {
  try {
   while (isStart) {
    if (msg != null) {
     System.out.println("msg:"+msg);
     oos.writeObject(msg);
     oos.flush();
     if (msg.getType() == TranObjectType.LOGOUT) {
      // 如果是发送下线的消息,就直接跳出循环
      break;
     }
    
 synchronized (this) {
      wait();// 发送完消息后,线程进入等待状态
     }
    }
   }
   oos.close();// 循环结束后,关闭输出流和socket
   if (socket != null && !socket.isClosed())
    socket.close();
  } catch (InterruptedException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

唤醒代码:

public void setMsg(TranObject msg) {
  this.msg = msg;
  
synchronized (this) {
   notify();
  }
 }

客户端输入线程ClientInputThread接到消息后,会进入等待状态,直到下次再次收到服务器发送的消息后,再唤醒输入线程去读取服务器发送的消息;

服务器输出线程OutputThread发消息后,会进入等待状态,直到下次服务器需要给客户端发送消息是,再唤醒输出线程;

服务器输入线程InputThread接收消息后,会进入等待状态,直到下次客户端发送消息过来,再唤醒输入线程去读取客户端发送的消息;

=============================================================================================

效果图

 

 

=============================================================================================

完整源码

http://download.csdn.net/detail/codehxy/7355841

提供基于TCP/IP网络的即时消息传送、消息广播、实时聊天、文件传输等功能。 具体列举如下: ? 支持多账号 ? 可以同时发送同一个消息给多人,通过输入这些人的号码列表或姓名列表 ? 可以同时发送一个消息给所有好友 ? 有权限的人可以向所有用户发送“消息广播”,便于消息的发布 ? 即使用户不在线,也能通过服务器发送离线消息 ? 提供消息、聊天的历史记录,方便对信息的查看和管理 ? 提供查看在线的人的功能 ? 提供按ID或姓名查找用户的功能,添加用户方便 ? 小窗口显示,不占用屏幕很大的空间, ? 支持热键调出后台的应用程序。 ? 应用程序运行后,在任务栏右边生成一个图标,单击弹出在线状态 菜单,双击显示应用程序窗口,右击弹出主菜单。 ? 支持隐身登陆,可以看到在线的朋友,朋友却不知道你上线了 ? 可以实时显示用户的状态和随时改变自己的状态 ? 提供了自动弹出消息 ? 好友上线通知 ? 好友下线更新 ? 有权限的人可以发系统广播(或在服务器上发) ? 查看好友信息 ? 按姓名或号码查找某人 ? 在好友列表中删除某人 ? 可以选择在某人的好友中删除自己 ? 更改个人信息 ? 系统设置 ? 给在线好友传文件 ? 消息管理器 ? 在程序中设定最大,最小窗口尺寸(宽度,高度) ? 主窗口总是浮在最上端 ? 速度快,占用资源少 论文简介 目录 第 1 章 概论 §1.1 课题的来源及意义 …………………………………………… 1 §1.2 网上寻呼的软件的现况……………………………………… 1 §1.3 面向对象方法与设计简介…………………………………… 2 §1.4 本章小结………………………………………………………… 3 第 2 章 网络通讯程序的设计原理和过程 §2.1 TCP/IP协议 …………………………………………………… 4 §2.2 客户/服务器程序的设计 …………………………………… 6 第 3 章 软件功能与界面需求…………………………………………… 9 第 4 章 概要设计和详细设计 §4.1总体设计概述……………………………………………………10 §4.2服务器数据库的设计 …………………………………………11 §4.3类设计的总体结构 ……………………………………………13 §4.4服务器端的常量定义 …………………………………………15 §4.5客户端的常量定义 ……………………………………………17 §4.6服务器端的底层通讯类的设计………………………………21 §4.7客户端的底层通讯类的设计…………………………………23 §4.8客户/服务器之间的通讯的数据类的设计 ………………25 §4.9发送数据的确认消息的编码方案 …………………………30 §4.10服务器端的分配用户帐号的策略…………………………31 §4.11 服务器的应用程序类CServerApp的设计 ……………31 §4.12 客户端的应用程序类CClientApp的设计 ……………33 §4.13服务器端检查用户是否仍然在线的算法 ………………34 §4.14服务器端处理用户请求的算法……………………………35 §4.15客户端处理服务器发送来数据的算法 …………………40 第 5 章 全文总结与工作展望 §5.1 全文总结…………………………………………………………42 §5.2 工作展望…………………………………………………………42 第 6 章 录 §6.1 查错日志…………………………………………………………43 §6.2设计中遇到的问题 ……………………………………………46 参 考 文 献……………………………………………………………………47
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值