QQ第一部分:

1.数据库
  每一个QQ账户必须有
   a、 state:是否上线的状态
   b、 IP:正在上线的主机的IP
   c、 port:UDP端口号(用这个和别的好友通讯)
   注:TCP连接时,在服务器端有端口号,这个端口号是在上线连接时要写入的,而客户端
   是随机的分配一个端口。两个客户间进行通讯时用的是无连接的UDP,每个客户在数据库
   都有标注的UDP端口号。
2.主外键关系
   自连接,在同一张数据库表中,主键又作为外键,(逻辑上是两个实体,
   实际上是一个实体)叫自连接。
   注:本项目中好友对照表分开建表,更清晰。如果在一张表中,
   记录会冗余的。
3.加好友的原理

  111——222
    222——111
   加好友:两边都同意,加两条记录。
   删除,加黑名单是同理。

4.QQ运行原理
 
     server—TCP(双向,可靠,事先建立持续连接)—thread1(socket、I/O)——Client1
      
            UDP连接(单向,不可靠,不用事先建立连接)
      
           Client2
5.TCP连接
   TCP是持久连接,必须要用死循环来打通连接。
   UDP是非持久连接,用数据报来传递的,不用事先建立连接。

6.几个注意的点
   a.字节流在写入时不用换行,字符流必须要换行
   b.服务器端是先读后写,客户端是先写后读。

QQ第二部分:

1.有别于前边方法的几个点
 a. 连接数据库时:
  db.properties:是一个文件,以(键值对)的形式存储的数据库信息文件
  项目部署的时候,要把项目的.class文件给客户,用户名和密码(公司自己的
  信息自己设定)都在里边,项目中要用这些信息,可以通过方法引用,
  然后用户也可以自己改变数据库类型,端口号等,项目仍可正常的使用。
 b. 加背景时。
  加背景,因为QQ用户在注册时选的QQ图像是随机的,所以以前的固定路径不能
  使用,现在在ImgPanel的构造时,给你一个path变量,即在生成图像时用的是
  动态的图片地址。初始化后显示为不同的图像。
 c. 布局管理器:box(我自己感觉像div选择器一样)
  盒子布局管理器,相当于容器,以前的是容器按照布局管理器的格式加内容,
  box可以直接添加内容,还能设置格式,在各个box之间添加空白位置,进行更合理
  的布局。
  布局方式:1.横向布局。2.纵向布局。
 d. CommonUse.componetsBounds:为了居中对齐,调用工具类。
 
 e.以前写页面是在一个工程里边,现在分为两个工程,逻辑更清晰,
 页面要写在客户端,数据库要写在服务器端,页面获取了数据,交给
 socket和I/O,通过网络给服务器端,然后服务器端获取数据,分析,从
 数据库取出相应的数据,然后同样通过socket和I/O返还给客户端。

f. 单写一种业务不能满足用户的需求,所以现在要求,服务器必须能够识别
 用户的当前的业务(注册或者是登录或者查找好友等等),完全企业级(用XML来实现报文的)
 应用,用报文(一种协议)来识别,每个报文有文件头,和报文体部分。
 报文头:识别何种业务
 报文体:本次业务需要操作的资源(可以省略,例:只是一个命令)
 之前学计算机网络时,说的协议头文件,就是这个。
 
 g. 为了让项目的逻辑更清晰,代码中出现的都是与业务逻辑相关的内容,
 把socket和I/O的东西都封装到另外一个类里,然后引用到,该页面即可。
 异常是Java通用层的东西(不该在业务逻辑层),Java业务逻辑层完成的业务的标准步骤:
 1.收集数据 2.打包上送 3.拿到结果 4.解析 5.显示到页面(最优秀的代码)
 
2.注意几点
 a. TCP的socket即I/O的对象,要在页面的构造方法init()方法前边(修改后的页面不存在这个问题)
  就是说,如果通道都没有打通,那么页面也不能显示,要不然有什么意义
 b. 获取图像名字的时候,左边要+1,因为左边是闭区间。
  把图像往下拉框里添加的时候,是作为一个文件夹来对待的,
  用到路径信息。
 
 c. 一个携带数据的对象,为了在客户端和服务器端都可进行对象携带数据的
  操作,那么该对象必须实现序列化接口Serielizable()

QQ项目的更多相关文章

  1. 团队项目--关于QQ项目的运行和总结

    目前为止该QQ项目实现如下功能:添加好友到好友列表,可以把好友在不同分类中移动,同时支持离线查找添加好友,离线更换头像,离线发送消息,保存所有好友聊天记录,发送窗口抖动,查看对方信息,更改/添加信息等 ...

  2. QQ项目(续)

    1.项目查找好友的原理 sql:select * from qquser where account in(select friendAccount from friend where userAcc ...

  3. 团队项目NABCD模型的需求分析

    团队项目NABCD模型的需求分析 NABCD模型的介绍 Need(需求)-现在市场上未被满足但又急需满足的客户需求是什么?Approach(方法)-要满足这种需求,我能够提出什么独特的方法吗?Bene ...

  4. Swift实战-小QQ(第1章):QQ登录界面

    1.新建小QQ项目 2.将所需用到的图片资源(resource)文件夹,添加到项目中.并新建一个登录页面:LoginViewController.swift 3.修改LoginViewControll ...

  5. Linux如何用QQ?Linux下QQ使用的几种方案

    在linux下如何使用QQ?在ubuntu11.10中如何使用QQ?或许有初涉linux的人这样问,我们可以看看ubuntusoft总结出来的几种在linux系统下用QQ的方法.前面的几种主要的方法都 ...

  6. 韩顺平_JAVA_视频教程_下载(打开迅雷,直接复制链接地址即可下载)

    ed2k://|file|韩顺平.循序渐进学.java.从入门到精通.第0讲-开山篇.avi|37021064|f4fb2fb3db938a642146ccc8f0935fed|h=ao2k3ep7p ...

  7. Lucene.net 从创建索引到搜索的代码范例

    关于Lucene.Net的介绍网上已经很多了在这里就不多介绍Lucene.Net主要分为建立索引,维护索引和搜索索引Field.Store的作用是通过全文检查就能返回对应的内容,而不必再通过id去DB ...

  8. Spring+SpringMVC+MyBatis+easyUI整合基础篇(十一)SVN服务器进阶

    日常啰嗦 上一篇文章<Spring+SpringMVC+MyBatis+easyUI整合基础篇(十)SVN搭建>简单的讲了一下SVN服务器的搭建,并没有详细的介绍配置文件及一些复杂的功能, ...

  9. 福大软工 · 第十二次作业 - Beta答辩总结

    第三视角Beta答辩总结 博客链接以及团队信息 组长博客链接 成员信息(按拼音排序) 姓名 学号 备注 张扬 031602345 组长 陈加伟 031602204 郭俊彦 031602213 洪泽波 ...

随机推荐

  1. WIN32,_WIN32_WIN64

    MSDN 里说,VC 有 3 个预处理常量,分别是 _WIN32,_WIN64,WIN32. 只要包含了 Windows.h,那么 WIN32 常量是肯定定义了的,所以不能用于判断平台环境(如果x64 ...

  2. 算法笔记-PHP实现栈的操作

    [栈]后进先出,先进后出,这就是典型的“栈”结构.         任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但却暴露了几乎所有的操作,难免会引发错误操作的风险.      ...

  3. 【Java】-NO.16.EBook.4.Java.1.007-【疯狂Java讲义第3版 李刚】- Java基础类

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.007-[疯狂Java讲义第3版 李刚]-  Java基础类 Style:EBook Series:J ...

  4. 【LeetCode每天一题】 Merge k Sorted Lists(合并K个有序链表)

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...

  5. git checkout .还可以恢复吗

    说实话,希望很渺茫, 如果你在git  checkout . 之前操作了git stash ,还是可以恢复的,操作如下: 最后修改文件恢复了! 但是如果你在git checkout .之前没有git ...

  6. 超实用教程,教你用墨刀做出小红书app原型

    一个新手怎么用1小时快速学会APP原型设计? 1小时很短,这意味着学习时必须把握APP原型设计中的重点.难点,而非面面俱到. 要在短时间内理解.掌握一个工具的使用,最有效的方式莫过于临摹: 看实例视频 ...

  7. LeetCode67.二进制求和

    给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...

  8. 关于hdfs 和hive的数据迁移

    1. 迁移hdfs,使用hadoop 命令 hadoop distcp -pugp  hdfs://localhost:9000/ hdfs://localhost:9000/ 此处示例仅作说明用 2 ...

  9. <<Natural Language Inference over Interaction Space >> 句子匹配

    模型结构 code :https://github.com/YichenGong/Densely-Interactive-Inference-Network 首先是模型图: Embedding Lay ...

  10. html5-label标签

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...