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. MySQL高效的前提

    好硬件是数据库高效的前提,没有好硬件其他优化都是白费 高性能的CPU 主频高SQL处理的更快 3级cache大CPU计算速率更快 多线程,同时并发处理SQL 关闭NUMA并设置为最大性能模式,充分利用 ...

  2. Centos ssh 限制ip访问

    要确定客户端计算机是否允许连接到服务,TCP包装器将引用以下两个文件,这两个文件通常称为主机访问文件: /etc/hosts.allow /etc/hosts.deny 当TCP包裹服务接收到客户端请 ...

  3. Centos7搭建Postfix发送邮件 Connection timed out

    telent  mx1.qq.com 25 25这个端口是不加密的,不安全,qq邮箱和网易的邮箱早就不用了.采用加密的方式

  4. Solutions_issues in pip

    pip fails ssl verification Solution: $ python -m pip <command> --trusted-host files.pythonhost ...

  5. 《Java程序设计》第一周学习记录(2)

    目录 使用JDB调试程序 系统文件被覆盖的挽救 参考资料 使用JDB调试程序 JDB是JDK自带的基于命令行的调试程序.我们先来man一下吧(说到这里,我之前在翻娄老师的博客的时候看到一篇文章:做中学 ...

  6. C# 指定http请求使用Tls1.2

    转载于 https://blog.csdn.net/yanghaitian/article/details/77498872 客户端语言 版本 类库 是否支持 兼容方案   Java 1.6.115之 ...

  7. iOS应用图标及尺寸

    Icon and Image Sizes Every app needs an app icon and a launch file or image. In addition, some apps ...

  8. LINQ以及LINQ to Object 和LINQ to Entities

    LINQ的全称是Language Integrated Query,中文译成“语言集成查询”,是一种查询技术. LINQ查询通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了查询过程.LIN ...

  9. keepalived+双主架构

    简介 keepalived是基于VRRP协议的,全称 Virtual Redundent Routing Protocal 虚拟路由协议,为解决静态路由单点故障引起的网络失效问题设计的一套主备协议 两 ...

  10. c扩展开发

    为什么要用C扩展 C是静态编译的,执行效率比PHP代码高很多.同样的运算代码,使用C来开发,性能会比PHP要提升数百倍.IO操作如CURL,因为耗时主要在IOWait上,C扩展没有明显优势. 另外C扩 ...