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 ...
随机推荐
- seller vue 编写接口请求【mock数据】
[build]-[webpack.dev.conf.js] 或 [build]-[dev-server.js] 在webpack.dev.conf.js中的写法 var appData = requi ...
- maven 转myeclipse eclipse 项目 命令
我们在网上下载的开源Maven工程想要转换成Eclipse能够识别的工程,需要执行如下命令: Jar工程: mvn eclipse:eclipse 或 mvn eclipse:myeclipse We ...
- 自己实现strtok函数
思路:每次在原来字符串中查找分隔字符串,将分隔字符串中所有字符设为'\0',然后输出分隔串前的子串,同时更新原串的起始位置. PS:有不少博客作者自己实现的方法中往往只将分隔串当做一个字符,实际上可以 ...
- PHP中的回调函数
回调函数是指调用函数的时候将另一个函数作为参数传递到调用的函数中,而不是传递一个普通的变量作为参数 使用回调函数是为了可以将一段自己定义的功能传到函数内部使用 声明回调函数的方法 变量函数声明 1 2 ...
- AOP 入门
1,源码 Application.java package com.bf; import org.springframework.context.ApplicationContext; import ...
- [LeetCode] 613. Shortest Distance in a Line_Easy tag: SQL
Table point holds the x coordinate of some points on x-axis in a plane, which are all integers. Writ ...
- java集合框架中Set和List的区别
1. Set 接口实例存储的是无序的,不重复的数据.List 接口实例存储的是有序的,可以重复的元素. 2. Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有Ha ...
- CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...
- 从零开始一起学习SLAM | SLAM有什么用?
SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻译为:同时定位与建图.同时定位与地图构建. 「同时定位与地图构建」这几个词,乍一听起来非 ...
- C# 深拷贝和浅拷贝
在编码中.经常会遇到赋值操作.值类型就不说了.如果是引用类型赋值.其实是引用传递,即赋值的是一个引用.比如: Person p1 = new Person("张三", " ...