Java Socket服務器關鍵代碼配置手冊
Java Socket服務器在很多人使用的時候會出現或多或少的問題,其實在關鍵代碼中有不少的問題需要我們處理,下面我們就看看如何才能更好的使用Java Socket服務器的相關代碼。
Procedure2相比procedure1加入了多線程的部分,一個線程負責專門去接受消息,另一個負責發送消息。當服務器端負責接收的線程因為readUTF()被阻塞不能發送消息時,負責發送消息的線程讓服務器端也能發送消息。同樣的原理,客戶端也如此。
服務器端加入的關鍵代碼如下:
- class ServerReadThread extends Thread{
- private DataInputStream dis;
- public ServerReadThread(DataInputStream dis){
- this.dis = dis;
- }
- public void run(){
- String info;
- try{
- while(true){
- info = dis.readUTF();
- System.out.println("客戶端說:" + info);
- if(info.equals("goodbye")){
- System.out.println("客戶端拜拜了!");
- System.exit(0);
- }
- }
- }catch(IOException e){
- e.printStackTrace();
- }
- }
- }
- class ServerWriteThread extends Thread{
- private DataOutputStream dos;
- private BufferedReader br;
- public ServerWriteThread(DataOutputStream dos,BufferedReader br){
- this.dos = dos;
- this.br = br;
- }
- public void run(){
- String info;
- try{
- while(true){
- info = br.readLine();
- dos.writeUTF(info);
- if(info.equals("bye")){
- System.exit(0);
- }
- }
- }catch(IOException e){
- e.printStackTrace();
- }
- }
- }
負責接受的類ServerReadThread繼承Thread,并構造一個DataInputStream對象參數的構造函數,接收對方信息。負責發送的類ServerWriteThread繼承Thread,并構造一個DataInputStream對象和BufferedRead對象的雙參數的構造函數,負責發送消息。new ServerReadThread(dis).start();new ServerWriteThread(dos,br).start();開啟兩個線程。客戶端原理與服務器端類似,就不做更詳細的講解。
思考:procedure2相比procedure1已經實現了多線程聊天,雖只是運行在控制臺上,但麻雀雖小,五臟俱全,這已經體現出了java Socket編程以及多線程的核心思想,此課程設計的目的已經達到。Java Socket服務器為實現更加人性化的效果,我引入javaGUI的組件awt,與之相關的技術也就隨之引入了,比如基于事件的驅動,還有awt各個組件之間的調用。與此同時,代碼的分布和組織結構都要做相應的調整。
【編輯推薦】