首页 > 代码库 > QQ项目(续)
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项目(续)