2012-07-18 92 views
0

我想創建一個使用java套接字的客戶端服務器程序。我有一些客戶端和一臺服務器。客戶端將有關其CPU負載的信息發送給服務器,然後來自客戶端的所有信息都由服務器保存到xml文件中。客戶定期發送這些信息(例如每5分鐘)。java套接字生成xml

從技術上講,我有一個問題需要控制,以及在每個客戶端發送CPU負載後如何解決這個問題。任何人都可以幫忙 這是我的代碼部分,

public void listenSocket(){ 
     int client=0; 
     while(client<2){ 
      ClientWorker w; 
       try{ 
        w = new ClientWorker(server.accept()); 
        Thread t = new Thread(w); 
        t.start(); 
        CpuLoad[client]=w.getLoad(); 
        Ip[client]=w.getIP(); 
       } catch (IOException e) { 
        System.out.println("Accept failed: 4444"); 
        System.exit(-1); 
       } 
      client++; 
     } 

     XmlGenerator xml = new XmlGenerator(); 

     try{ 
      xml.generate(CpuLoad, Ip); 
      System.out.println("file generated"); 
     }catch(Exception e){ 
      System.out.println("Can't generate file"); 
     } 

} 

我認爲我的算法是正確的,但仍然有一個錯誤:

Exception in thread "main" java.lang.NullPointerException 
      at server.ServerOne.listenSocket(ServerOne.java:39) 

這是類Clientworker

class ClientWorker implements Runnable{ 
    Socket client; 
    String ip; 
    String load; 
    String data[]=new String[7]; 


    ClientWorker(Socket client){ 
    this.client = client; 
} 

public void setIP(String ip){ 
     this.ip = ip; 
    } 

    public void setData(String load){ 
     this.load = load; 
    } 

    public String getIP(){ 
     return ip; 
    } 

    public String getData(){ 
     return load; 
    } 

public void run(){ 

    BufferedReader in = null; 
    PrintWriter out = null; 

    try{ 
     in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
     out = new PrintWriter(client.getOutputStream(), true); 
    } catch (IOException e) { 
     System.out.println("in or out failed"); 
     System.exit(-1); 
    } 

      try{ 
       String a = in.readLine(); 
       setData(a); 
       String b = client.getInetAddress().toString(); 
       setIP(b); 
     //Send data back to client 
       out.println(a); 
       System.out.println(a);  
      }catch (IOException e) { 
       System.out.println("Read failed"); 
      } 

} 

} 
+0

你的問題太模糊,給你任何明智的答案。請張貼一些代碼和一些說明你在哪裏遇到問題以及具體問題。 – maasg 2012-07-18 08:39:53

+0

希望這個改進更有幫助。謝謝@maasg – irvana 2012-07-18 08:51:37

+0

不是。哪一行是39行?當你捕捉到一個異常時,不要只編寫自己的錯誤信息:使用異常附帶的錯誤信息。 – EJP 2012-07-18 08:59:08

回答

0

的此代碼中的問題是ClientWorker與「主」之間缺乏同步機制。你爲工作人員啓動一個線程,然後1條指令請求它的任務結果。這就像老師給你作業,並在一分鐘後詢問結果。你打算說什麼? 「對不起,我沒有」,或翻譯成你的代碼,「空指針異常」。

您需要一種方法讓工人完成工作。只有在工作人員有要報告的情況之後,纔會要求結果。 這是作業,我不會完成你的代碼。你應該看看:

我最喜歡的:

我已經在這個題目讀最好的書:

隨意張貼在具體問題上的新問題。

+0

非常感謝@maasg。:D – irvana 2012-07-18 10:55:18

+0

well @maasg,我真的堅持這個問題,我放棄了,我讀過了你給我的鏈接。需要幫忙。 – irvana 2012-08-06 06:06:35