我正在尝试使用 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)
这是一类客户工作者
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");
}
}
}