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");
}
}
}