QQ项目
Posted StephenChowcai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QQ项目相关的知识,希望对你有一定的参考价值。
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项目的主要内容,如果未能解决你的问题,请参考以下文章
百分百用Java se写QQ项目的整体设计思想(swing)
百分百用Java se写QQ项目的整体设计思想(swing)