2012-07-18 86 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