在線聊天系統的雛形,是對我學習了J2SE的基礎之後,開發練手的第一個項目;
該項目分成如下幾個步驟,並對每個步驟的知識點,做一定的小結:
1. 產生一個窗口:
主要用到的知識點是,從Frame中繼承;
2.窗口的初步佈局:
主要用到TextField和TextArea 兩個Api函數;
3.加入窗口關閉事件:
主要用到 匿名類,此處是一種固定的寫法,如下:
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
disconnect();
System.exit(0);
}
});
4.加入TextField事件處理:
主要用到addActionListener();
5.加入ChatServer:
主要考察ServerSocket通信;
6.Client端連上服務器端:
在ChatClient中添加一個connect方法,並在launchFrame中調用;
7.客戶端給服務器端發消息:
想要發送消息,就要拿到這個Socket,將上面版本中作爲局部變量的Socket,轉變成成員變量;
在ChatServer中接受客戶端傳來的消息,並打印出來;
8.修正上個版本,使客戶端可以發送多個語句:
通過在ChatServer中定義兩個boolean類型的變量,來控制服務器的啓動 和 客戶端的連接;
9.修正一些bug;
10.連上多個客戶端:
首先,需要使用一個List的泛型集合來裝載各個連接的client;
此處ChatServer程序需要大幅修改,使用線程解決一個線程控制一個客戶端,因此在ChatServer程序中寫一個Client內部類,代表客戶端那邊在服務器這邊的包裝;
11.服務器轉發消息:
此處只需修改ChatServer,在內部類Client中寫一個send()方法往外寫,同時通過內部類Client中的run方法調用send方法;
12.客戶端接受消息:
通過線程來接受消息;
13. 修改當關閉一個Client之後,再在其中某個Client中輸入時報錯:
原因是:在run方法中會調用c.send(str),不過在這是Client已經關閉,所以在向他發送,會報錯;
解決辦法是:在send方法中捕獲異常的時候去掉當前的client;