[英]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.