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