繁体   English   中英

Java套接字生成XML

[英]java socket generate xml

我正在尝试使用Java套接字创建客户端服务器程序。 我有一些客户端和服务器。 客户端将有关其CPU负载的信息发送到服务器,然后服务器将来自客户端的所有信息保存到xml文件中。 客户定期发送此信息(例如,每5分钟发送一次)。

从技术上讲,在每个客户端发送了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");
            }

}

}

此代码中的问题是ClientWorker与“主服务器”之间缺乏同步机制。 您为工作程序启动了一个线程,然后在一条指令中询问其任务的结果。 就像老师给您功课并在一分钟后要求结果。 你打算说什么? “对不起,我没有它”,或翻译为您的代码“空指针异常”。

您需要一种让工人完成工作的方法。 您仅在工人有要报告的内容后才要求结果。 这是家庭作业,我不会完成您的代码。 您应该调查:

我最喜欢的:

我读过的关于该主题的最好的书:

随时发布有关特定问题的新问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM