Atea - Hero's Grave

          面向對象,開源,框架,敏捷,云計算,NoSQL,商業智能,編程思想。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            40 隨筆 :: 0 文章 :: 28 評論 :: 0 Trackbacks
          年初正是JavaFX熱的的時候,于是便學習了相關基礎編程,作了個小聊天室。
          雖然NetBeans 6.0支持JavaFX集成,但Editor的完成度并不高。當時為了javafx和java class之間互相傳值可真是費了不少周折:<
             更多JavaFX Script™資料請見官網:https://openjfx.dev.java.net
             Matrix上有不少中文資料:http://www.matrix.org.cn

          主要邏輯:
          首先啟動Server監聽端口,然后啟動Client。當Client輸入聊天信息,會發送給Server,然后Server再群發到每一個Client上。


          運行效果圖:
          Server端console:

          Client端console:

          Client端前臺畫面:


          Server端的部分代碼:
          Server.java

           1 package server;                                
           2                                 
           3 import java.net.DatagramSocket;                                
           4 import java.net.InetAddress;                                
           5 import java.util.Vector;                                
           6                                 
           7 public class Server{                                
           8                                 
           9     //Server IP                                
          10     public static InetAddress iaServer;                                  
          11     //Temporary Client IP                                
          12     private  static InetAddress iaClient;                                
          13     //Clients IP                                  
          14     public static Vector<InetAddress> iaClientArr;                                
          15     //Server datagram packets                                
          16     public static DatagramSocket dsServer;                                
          17                                 
          18     //Add client IP                                
          19     public static void addClientIp(byte b[]){// }                                
          20                                     
          21     //Delete client IP                                   
          22     public static void delClientIp(InetAddress ia){// }                                
          23                                     
          24     public static void main(String args[]){                                
          25         try{                                 
          26             iaServer=InetAddress.getByName(InetAddress.getLocalHost().getHostName());                                 
          27             //server的端口設為1234                                
          28             dsServer = new DatagramSocket(1234,iaServer);                                  
          29             iaClientArr = new Vector<InetAddress>();                                
          30                                 
          31             ServerRecieve tr = new ServerRecieve();                                
          32             tr.start();                                
          33                                             
          34             System.out.println("Server started.");                                
          35         }                                
          36         catch(Exception e){                                
          37             e.printStackTrace();                                
          38             System.exit(1);                                
          39         }                                            
          40     }                                
          41 }                                                          
          ServerRecieve.java
           1 package server;                                
           2                                 
           3 import java.net.DatagramPacket;                                
           4                                 
           5 public class ServerRecieve extends Thread{                                
           6                                 
           7     //Receiving datagram packets                                
           8     private String PASSTEXT;                                
           9                                     
          10     @Override                                
          11     public void run(){                                
          12         recieve();                                
          13     }                                
          14                                 
          15     //Recieve from client                                
          16     private void recieve(){                                
          17         try{                                
          18             while(true){                                
          19                                 
          20                 byte dataRecieve[]= new byte[Short.MAX_VALUE];                                
          21                 DatagramPacket dpRecieve = new DatagramPacket(dataRecieve,dataRecieve.length,Server.iaServer,1234);                                
          22                 Server.dsServer.receive(dpRecieve);                                
          23                                                 
          24                 if(dpRecieve.getData() == null || dpRecieve.getData().equals("")){                                
          25                     Thread.sleep(300);                                
          26                     continue;                                
          27                 }                                
          28                 dataRecieve = dpRecieve.getData();                                
          29                                                 
          30                 //when client first run,post IP to server.                                
          31                 String sTem = new String(dataRecieve).trim();                                
          32                 //client第一次啟動,會發送一個握手協議,通知server加入client ip                                
          33                 if(!sTem.startsWith("up\n")){                                
          34                     this.PASSTEXT = sTem;                                 
          35                     System.out.println("Server recieved: " + this.PASSTEXT);                                
          36                     ServerSend ss = new ServerSend(this.PASSTEXT.getBytes());                                
          37                     ss.start();                                                    
          38                 }                                
          39                 else{                                
          40                     sTem = sTem.substring(3);                                
          41                     Server.addClientIp(getIPByte(sTem));                                
          42                 }                                
          43             }                                
          44         }catch(Exception e){                                
          45                 e.printStackTrace();                                
          46         }                                
          47     }                                
          48                                     
          49     //Get IP from string                                
          50     private byte[] getIPByte(String IP){//}                                
          51                                     
          52 }                                
          ServerSend.java
           1 package server;                            
           2                             
           3 import java.net.DatagramPacket;                            
           4 import java.net.InetAddress;                            
           5                             
           6                             
           7 public class ServerSend extends Thread{                            
           8                                 
           9     //Sending datagram packets                            
          10     private byte dataSend[];                            
          11                             
          12     public ServerSend(byte b[]){                            
          13         this.dataSend = b;                            
          14     }                            
          15                             
          16     @Override                            
          17     public void run(){                            
          18         send();                            
          19     }                            
          20                             
          21     //Send to clients                            
          22     private void send(){                            
          23         DatagramPacket dpSend;                            
          24         for(InetAddress ia : Server.iaClientArr){                            
          25             try{                            
          26                 dpSend = new DatagramPacket(dataSend,dataSend.length,ia,5678);                            
          27                 Server.dsServer.send(dpSend);                            
          28                 System.out.println("Server sent: " + new String(dataSend));                               
          29             }                            
          30             catch(Exception e){                            
          31                 Server.delClientIp(ia);                            
          32             }                            
          33         }                                    
          34     }                            
          35 }                            

          下一篇:用java.net包和JavaFX制作簡單的C/S聊天室(二):Client端的部分代碼
          posted on 2008-07-18 12:19 Atea 閱讀(1076) 評論(0)  編輯  收藏 所屬分類: Java language
          主站蜘蛛池模板: 聊城市| 镇坪县| 长兴县| 连平县| 理塘县| 上杭县| 麻江县| 独山县| 湄潭县| 藁城市| 湟中县| 宁远县| 宜宾市| 安庆市| 丰县| 新昌县| 民丰县| 乳山市| 梅河口市| 东光县| 资溪县| 崇信县| 阳信县| 平泉县| 盐亭县| 凤翔县| 沛县| 廉江市| 边坝县| 临澧县| 思茅市| 马边| 抚顺县| 仙游县| 定远县| 罗源县| 屏南县| 宣化县| 杨浦区| 勃利县| 唐海县|