通訊基礎篇小專案-----多人聊天QQ的實現
自然界的通訊種類是多種多樣的,我們在每一天都會遇到各種各樣的通訊問題。然而通訊的實質是什麼,其實就是一種協議而已,僅此。就拿語言文字來說吧,每個國家制定不同的語言用來實現交流,這就是一種最基礎的通訊,每個文字代表的是一種不同的內容,這是人和人之間事先定好的協議,所以說,只要協議一旦確定,通訊就不是什麼大問題了。
學習java通訊的核心是建立伺服器,客戶端連線伺服器,客戶端與伺服器的資訊交換。建立伺服器只需要一行程式碼就足夠了Socketserver server=new Socket(port)(其中port為伺服器得埠號),建立伺服器後,伺服器需要進入等待狀態,一旦有客戶端連線上來就會主動把埠給予客戶端,客戶端與伺服器可以是就連線在一起。就可以等待訊息的傳送了。當然這個過程也只需要一行程式碼,Socket client=server.accept();. 最後就是客戶機連線伺服器了,連線伺服器也只需要一行程式碼Socket client=new Socket("ip" , port)(就是需要獲得伺服器的ip地址和埠號)。這樣一個簡單的伺服器和埠就連線好了。
下面是根據這個原理寫的一個簡單多人聊天室。
首先是UML圖:首先我們得定義六個類,
這樣,一個簡單的多人聊天室就構架好了,下面是實現的過程,首先是啟動介面類,客戶端的介面類會彈出如下視窗。
輸入埠號就可以建立伺服器,一個簡單的伺服器就這樣建立了,當然,由於客戶端的程式碼在設定的時候沒有設定傳IP地址,所以這裡預設的埠只能是6666.這會在以後得以解決。
啟動客戶端介面如下
點選連線伺服器後就可以連線到伺服器中。對話開始。當然這裡我們多建立幾個客戶端開始聊天。
開始聊天、
這樣一個簡單的聊天是就實現了。再來溫習一下:
首先是是伺服器建立,並且讓伺服器處於等待狀態
public void setupServer(){ try{ ServerSocket so=new ServerSocket(port); System.out.println("建立伺服器成功了,port: "+port); while(true){ client =so.accept(); System.out.println("有人來連結了"+client.getRemoteSocketAddress().toString()); //啟動一個伺服器的執行緒去處理這個連上來的客戶端 ServerThread st=new ServerThread(client,jtereceive); st.start(); ChatList. ThreadAdd(st); } }catch(Exception e){ e.printStackTrace(); } }
客戶端來連線伺服器
Socket socket=new Socket(this.IP,this.port);
讀取訊息的時候為了不阻塞其他執行緒的進行,所以讀取執行緒的方法要單獨的在一個執行緒。