サーバーリスナーを作成しようとしています。クライアントからのデータを待機し、データの性質に応じて設定アクションを実行します。しかし、現在、最初のデータストリームを受信した後、それはリソースを大量に消費し、メモリ使用量が急増し、CPU使用率がシングルコアを最大限に活用しています。
1-どうすればこれを修正できますか?本当に小さなプログラムであることがわかるように、リソースを大量に消費せずにリッスンさせるにはどうすればよいですか。
2-これらのデータストリームを送信するクライアント自体は、1回実行されます。起動し、サーバーに接続し、データを送信して終了します。サーバーがまだ「オン」のときに、クライアントの実行を再試行すると、サーバーはデータを受信しません。
サーバーコード:
package mediaserver;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Main {
ServerSocket ss;
Socket s;
BufferedReader br;
public Main() throws IOException{
ss = new ServerSocket(1111);
s = ss.accept();
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
new Thread(new runner()).start();
}
class runner implements Runnable{
public void run(){
while(true){
try {
String n = br.readLine();
System.out.println(n);
} catch (IOException ex) {
}
finally{
try {
s.close();
ss.close();
} catch (IOException ex) {
}
}
}
}
}
public static void main(String[] args) throws IOException {
new Main();
}
}
クライアントコード
package mediaserver;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class test {
public static void main(String [] args) throws UnknownHostException, IOException, InterruptedException{
Socket s = new Socket("127.0.0.1", 1111);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bw.write("");
bw.newLine();
bw.flush();
}
}