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()
轉載于:https://www.cnblogs.com/StephenChowcai/p/7291150.html
總結
- 上一篇: 2022十二月GBase8a第二次阶段考
- 下一篇: libcurl使用样例