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 ...
随机推荐
- GIT中常用的命令
最近项目中使用到了GIT,所以记录一下GIT中常用的命令. GIT使用的客户端有Git Bash:http://code.google.com/p/msysgit/ 还有乌龟TortoiseGit:h ...
- BBS项目
一.需求分析 1.首页(显示文章) 文章详情 点赞,点踩 文章评论(子评论,评论的展示) 登录功能(图片验证码) 注册功能(基于form验证,ajax) 个人站点(不同人不同样式,文章过滤) 后台管理 ...
- awesome vue
https://blog.csdn.net/caijunfen/article/details/78216868
- 如何在CentOS 7中安装最新Git(源码安装)
如何在CentOS 7中安装最新Git 2017年05月20日 11:49:53 阅读数:1624 Git是在今天的软件开发行业一个非常有用的版本控制工具.我一直使用Git.于是为Linux公社的读者 ...
- linux中 /dev/null命令
/dev/null :代表空设备文件 > :代表重定向到哪里,例如:echo "123" > /home/123.txt1 :表示stdout标准输出,系统默认值是 ...
- centos7部署fabric-ca错误解决
1.fabric-ca 编译错误:ltdl.h: no such file 在fabric-ca目录中使用make编译时,会出现如下错误: 解决方案: 如果在ubunt操作系统中,只需安装:apt i ...
- JMeter登录总是提示用户名不能为空的解决
已传入参数了呀,还是提示用户名不能为空 解决: 将url拼接上参数 --
- react-router v4 使用 history 控制路由跳转
问题 当我们使用react-router v3的时候,我们想跳转路由,我们一般这样处理 我们从react-router导出browserHistory. 我们使用browserHistory.push ...
- centos5 升级到centos6
From http://www.linuxquestions.org/questions/linux-newbie-8/yum-update-error-4175476250/ 对开发组的一个服务器执 ...
- 延期版本webstorm(解决许可证过期,注册,激活,破解,码,支持正版,最新可用)
很多人都发现 http://idea.lanyus.com/ 不能激活了 很多帖子说的 http://15.idea.lanyus.com/ 之类都用不了了 选择 License server (20 ...