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数据报进行监听的时候,
因为要随时等候其好友向其发送消息(数据报)
QQ项目(续)的更多相关文章
- 团队项目--关于QQ项目的运行和总结
目前为止该QQ项目实现如下功能:添加好友到好友列表,可以把好友在不同分类中移动,同时支持离线查找添加好友,离线更换头像,离线发送消息,保存所有好友聊天记录,发送窗口抖动,查看对方信息,更改/添加信息等 ...
- QQ项目
QQ第一部分: 1.数据库 每一个QQ账户必须有 a. state:是否上线的状态 b. IP:正在上线的主机的IP c. port:UDP端口号(用这个和别的好友通讯) 注:TCP连接时,在 ...
- 安卓自定义日期控件(仿QQ,IOS7)续
本篇是在原来的基础上修改了界面效果,使其更加接近ios7,qq等日期选择控件,看图: 源码地址:http://download.csdn.net/detail/baiyuliang2013/87601 ...
- 第一个VS2015 Xaramin Android项目(续)
上文说到已经第一个 App已经可以运行,但是并不能调试! 经过细心发现,我察觉到VS刚开始进入了调试模式,但是一闪而过.也就是说调试失败了,此时需要等待一段时间才能打开此App,如果立即打开App 会 ...
- 团队项目NABCD模型的需求分析
团队项目NABCD模型的需求分析 NABCD模型的介绍 Need(需求)-现在市场上未被满足但又急需满足的客户需求是什么?Approach(方法)-要满足这种需求,我能够提出什么独特的方法吗?Bene ...
- Swift实战-小QQ(第1章):QQ登录界面
1.新建小QQ项目 2.将所需用到的图片资源(resource)文件夹,添加到项目中.并新建一个登录页面:LoginViewController.swift 3.修改LoginViewControll ...
- Linux如何用QQ?Linux下QQ使用的几种方案
在linux下如何使用QQ?在ubuntu11.10中如何使用QQ?或许有初涉linux的人这样问,我们可以看看ubuntusoft总结出来的几种在linux系统下用QQ的方法.前面的几种主要的方法都 ...
- 安卓自定义日期控件(仿QQ,IOS7)
还记得上篇:高大上的安卓日期时间选择器,本篇是根据上篇修改而来,先看下qq中日期选择的效果: 鉴于目前还没有相似的开源日期控件,因此本人花费了一些时间修改了下之前的日期控件,效果如图: 虽说相似度不是 ...
- 韩顺平_JAVA_视频教程_下载(打开迅雷,直接复制链接地址即可下载)
ed2k://|file|韩顺平.循序渐进学.java.从入门到精通.第0讲-开山篇.avi|37021064|f4fb2fb3db938a642146ccc8f0935fed|h=ao2k3ep7p ...
随机推荐
- SLAM最近的工作
- ES7 async 函数
async 函数 let getdata=function(){ return new Promise((resolve,reject)=>{ resolve('aaa'); }) } let ...
- Django 框架 django的请求生命周期
概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串,同时http请求是无状态的,可以通过session和cookie来辅助. 浏览器通过ip和端口及路由方式访问服务端. 在Djang ...
- 【LeetCode每天一题】Reverse Integer(反转数字)
Given a 32-bit signed integer, reverse digits of an integer. Example 1: ...
- Java实现个人博客网站
说明:该项目是实验楼用户"LOU3165780622"发布在实验楼上的项目教程:[Java实现个人博客],未经允许,禁止转载: 该项目利用 SSM 框架和 Mysql 以及一些简单 ...
- 密码登录源码(jsp+java+数据库)
jsp界面: <%@ page language="java" contentType="text/html; charset=utf-8" pageEn ...
- React/VUE 脚手架2.0和3.0
react官方脚手架 npm install -g create-react-app create-react-app my-app cd my-app npm start 区别自己对比 vue2.x ...
- Cocos Code IDE (下载地址)
Cocos Code IDE 1.2.0 下载地址 Cocos Code IDE 1.2.0 Win32 下载地址: http://www.cocos2d-x.org/filedown/c ...
- es6Math对象新增的方法
Math.trunc() Math.trunc方法用于去除一个数的小数部分,返回整数部分. 对于没有部署这个方法的环境,可以用下面的代码模拟. Math.trunc = Math.trunc || f ...
- schame定义及用处
一.schame详解 http://www.cnblogs.com/Neo-ds/p/4790413.html 1.先明确一点,SQL Server中模式(schema)这个概念是在2005的版本里才 ...