1. 程式人生 > >JAVA入門到精通-第91講-山寨QQ專案5-一對一的聊天

JAVA入門到精通-第91講-山寨QQ專案5-一對一的聊天


聊天: 希望在介面最上面顯示我的QQ號碼:顯示自己的編號; 在視窗欄顯示自己的編號:
--------------------

String  ownerId



--------------------------------- 真實的QQ, 客戶端1/2可能直接走區域網;

藉助於伺服器進行中轉: 客戶端1如果登入成功,Hello,準備和2聊天, 資訊發到伺服器:
(1)如果2不線上,伺服器策略:把資料暫存在資料庫-message表; 等2上線,伺服器把資訊按順序回送給客戶端2;

(2)如果2線上,伺服器和客戶端2存在著一個連線,S,通道; 伺服器策略:伺服器為了可以完成資訊轉發,把伺服器得到的每一個 socket[]儲存在Hashmap裡面;
對於每一個socket,伺服器認為是一個執行緒,
當伺服器和某個客戶端形成一個連線時(Socket), 伺服器端就單開一個執行緒; 讓該執行緒與客戶端通訊;
---------------------------------------------------- 對伺服器端進行改造: 單開一個執行緒,讓該執行緒與客戶端保持通訊: -SerConClientThread public SerConClientThread(Socket  s) 把伺服器和客戶端的連線賦給s

讀的是Message,通過 Message物件進行互動的;
伺服器得到的資訊Message;
----------------------- -Message屬性的新增: 傳送者,接收者,資訊內容,時間等等; -----------------------------------

----------------------------------------------------------- ----------------------------------------------------------- new java.util.Date( ).toString( )
s要在QqChat裡面運用;
//傳送給伺服器

--------------- --------------- -執行緒控制的,這條通道已經打通了;
-2號線上,1號發給2號的資訊,通過伺服器轉給2號 ; -伺服器只要拿到socket,就好了;
伺服器和getter達成的socket;
-我們可以把伺服器得到的每個socket[客戶端], 儲存在Hashmap,用客戶的id號標識該socket;
-ManageClientThread Hashmap<String,SerConClientThread> (); String    使用者ID; SerConClientThread   使用者執行緒;
線上---HashMap裡面有ID號;
public static xxxxxx 只能有一份HashMap;
-把執行緒加入HashMap裡面
-轉發是線上程當中發生的 // // 接收到某個人給某個人發的message物件, 找到接收人的那個通訊執行緒, 再將其發回去; // ---------- QqChat必須一直要處於讀的狀態,做成執行緒; 才能進行聊天
ObjectInputStream  ois=new Object
轉發任務已經完全實現了;
----------------------------------- 好友線上,顯示彩色頭像; 反之,顯示灰色頭像;














來自為知筆記(Wiz)