QQ项目(续)

1.项目查找好友的原理

  sql:select * from qquser where account in(select friendAccount from friend where userAccount = ‘111111‘);
 原理:是从信息全的表里进行全列的查询in 对照信息的表里进行筛选的查询。

代码:

  //获取所有的好友
   private List<Qquser> getFriends(Qquser qquser) {
    List<Qquser> list = null;
    IQqUserDao dao = new QqUserDaoImpl();
    String sql = "select * from qquser"
      + " where account "
      + "in (select friendAccout from friend where userAccount = ‘"+qquser.getAccount()+"‘)";
    list = dao.findBySql(sql);
    return list;
   }

加头像的步骤:

  分三步:
  a. 先把头像加载到好友列表的缓存
  b. 然后给listModel加的是(addElement)对象
  c. 最后换章子this.friendList.setCellRenderer(new ClientImgCell());//这里相当于一个印章

2.TCPSocket:输入输出对象
  客户端输入输出对象(in 和 out) 初始化的顺序,一定是先out再in,
服务器端的输入输出对象(in和out)初始化的顺序是先in在out。

3.

  文件加密:把一个文件按照特定的加密字符串,分割,然后接收方按照
这个字符串来切分文件即可使用,即达到了加密的效果。

4.

  通知上线步骤,在登录验证成功后,改数据库然后返回完整信息,然后,查找所有
在线好友,写通知上线报文,然后发送。(通知上线是广播消息)

5.

  发送到主界面了,但是主界面不能直接收(不能在任何地方写收UDP报文的代码)
,因为它是一个阻塞方法,一旦写了,主界面的显示会受到影响。
解决阻塞的方法是:多线程,所以要写一个监听者模式外带多线程来处理这个问题。
线程:线程是靠触发来执行的。所以一句代码搞定。

6.UDP的多线程的思路:
  1.事件源是由UDP报文来触发执行的,然后交给观察者做事情。
  2.事件源还必须是线程。要不然会阻塞的。(等待被触发)否则不会影响其他代码的执行。
  3.以前的代码是顺序执行,过不去就会阻塞。

7.

  为了像TCP传输一样便于使用,同样写了UDPSocket把和UDP传输相关的Java通用层
封装在一个类里,外界只管调用。加入UDPSocket的时机,是登录时就应该加入,因为
那时如果验证通过,那么会把自己的端口号和主机IP告诉服务器,服务器通知 其所有在线的好友
如果到主界面才记录UDPSocket,显然很迟了,主界面应该是到UDP数据报进行监听的时候,
因为要随时等候其好友向其发送消息(数据报)

时间: 2024-08-04 22:07:57

QQ项目(续)的相关文章

使用 Bootstrap 和 HTML5 Boilerplate 开始一个项目续

在前面我用 Bootstrap 和 HTML5 Boilerplate 搭建了一个项目基础框架,可是还只是空白一片,没有什么实际内容,现在可以开始向里面增加内容了.回到那个项目起点 index.html,一开始是给文档设置一个标题,就随随便便取一个好了: <title>有标题文档</title> 真的取得很随意,不要太认真了,接下来添加以下页面主体内容: 一个包含 logo 和导航的 banner 一个包含主要内容的 main 元素 一个包含版权信息和社交链接的页脚 把在 inde

QQ项目

QQ第一部分: 1.数据库 每一个QQ账户必须有  a. state:是否上线的状态  b. IP:正在上线的主机的IP  c. port:UDP端口号(用这个和别的好友通讯)  注:TCP连接时,在服务器端有端口号,这个端口号是在上线连接时要写入的,而客户端  是随机的分配一个端口.两个客户间进行通讯时用的是无连接的UDP,每个客户在数据库  都有标注的UDP端口号.2.主外键关系  自连接,在同一张数据库表中,主键又作为外键,(逻辑上是两个实体,  实际上是一个实体)叫自连接.  注:本项目

JAVA入门到精通-第92讲-山寨QQ项目6-多对多的聊天

QQ聊天项目演示-多对多的聊天 流同时并发的异常: 服务器中转 2/3号只有一个连接: 接收信息:while循环不停地读取: 当1号点开两个窗口时,2/3会共同去争取这个socket: 会出现流同时并发异常: Socket处理成static不太合理: 启动一个窗口就会占据Socket不放: ------------- -实现真正的多人聊天,互相不出现错误 -每一个登录的账号独享一份socket -去掉static 当一个链接达成的时候, 启动线程, 和服务器保持通讯的状态: 做一个类来管理客户端

安卓自定义日期控件(仿QQ,IOS7)续

本篇是在原来的基础上修改了界面效果,使其更加接近ios7,qq等日期选择控件,看图: 源码地址:http://download.csdn.net/detail/baiyuliang2013/8760159

JAVA入门到精通-第94讲-山寨QQ项目8-好友在线提示

遇到的问题: 现在每登录一个人,后面的人是能看到前面的登录的人的: 但是,前面的人看不到后面的人登录: //后面每登录一个人,有责任去通知前面登录的人他已经上线了: 通知了完以后,需要更改好友在线的情况: //不让同一个账号反复登录 //如果 好友不在线,则不能聊天 ================================ [ManageQqChat.java] /** * 这是一个管理用户聊天界面的类 */ package com.qq.client.tools; import jav

博客项目续

# 博客项目 ### 昨日内容完善 - 密码加密存储 ```python from werkzeug.security import generate_password_hash, check_password_hash # 用户模型 class User(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True) passw

QQ项目随笔-15-05-19

1——代理是一对一,通知是一对多的 2——字典里存放的是对象,要想取出数据要先转换为结构体,通过value来转换 3——如果需要设置键盘的属性(比如键盘内部某个控件名称),要看是哪个控件调出该键盘,然后键入相关的控件里进行修改,比如textView 里面的 auto-enable Return key 还有return key. 4——UItextfield 里有个leftVIew用来添加设置输入框左边的view,其中还有个leftViewMode 用来设置模式. 5——通知的时候有添加监听就要

JAVA入门到精通-第93讲-山寨QQ项目7-好友在线提示

-显示聊天信息 -用一个类来管理聊天界面,放到HashMap里面: QqChat放到一个类里面进行管理: HashMap管理就是引用了一下: ManageQqChat类对显示来说非常重要了: ------------------------- -好友在线提示  在线-头像彩色:  不在线-头像灰色: 只有服务器才能知道谁在线.谁不在线: -QqFriendList -默认只有自己在线,别人不在线: -1/4应该知道互相在线 -思路:当一个用户登录成功后,就向服务器发送一个要求  返回在线好友的包

团队项目NABCD模型的需求分析

团队项目NABCD模型的需求分析 NABCD模型的介绍 Need(需求)-现在市场上未被满足但又急需满足的客户需求是什么?Approach(方法)-要满足这种需求,我能够提出什么独特的方法吗?Benefits (收益)-该方法给顾客提供的便利是什么?Competition (竞争) -对于竞争对手和其他可选择的方案来说,这种单位成本收益的优势在哪里? ? 1. ?Need 需求 ? ?我们的这次qq项目适用于局域网内的聊天通讯所用,用的数据库轻小而稳定,我们通过了数据设计的第三大范式进行约束表的