クライアントが1秒間に約10回文字列を送信する単純なサーバー(Javaアプリケーション)とクライアント(Androidアプリ)を実装しようとしています。サーバーがクライアントからのメッセージの受信を停止した後、すべてが 1 分間ほど正常に動作します。以下の関連コード。
ClientThread.java
public class ClientThread implements Runnable{
static Socket socket;
static String message = "";
InetAddress serverAddr;
BufferedOutputStream bos;
public ClientThread(String message){
ClientThread.message = message;
}
@Override
public void run() {
try{
serverAddr = InetAddress.getByName(SERVER_IP);
if(socket != null && socket.isConnected())socket.close();
socket = new Socket(serverAddr, SERVER_PORT);
bos = new BufferedOutputStream (socket.getOutputStream());
OutputStreamWriter osw = new OutputStreamWriter(bos, "US-ASCII");
osw.write(message);
osw.flush();
socket.shutdownOutput();
socket.close();
}catch (Exception e) {
}
}
}
ServerThread.java
public class ServerThread extends Thread{
private ServerSocket serverSocket;
static String clientSentence;
public ServerThread(int port) throws IOException, AWTException{
serverSocket = new ServerSocket(port);
}
public void run() {
while(true){
try{
Socket server = serverSocket.accept();
BufferedReader d = new BufferedReader(new InputStreamReader(server.getInputStream()));
clientSentence = d.readLine();
System.out.println(clientSentence);
server.close();
}catch(IOException e){
e.printStackTrace();
break;
}
}
}
}
ClientThread.java は、次を使用して 1 秒間に約 10 回呼び出されます。
Thread clientThread = new Thread(new ClientThread(message));
clientThread.start();
ServerThread.java は初期化され、以下を使用して開始されます。
t = new ServerThread(8888);
t.start();
少し実行した後にこれがフリーズする理由について何か考えはありますか? これを修正する唯一の方法は、サーバーを再起動することです。その後、1 分後に同じ問題が再び発生します。この問題の調査に多くの時間を費やしましたが、解決策を見つけることができませんでした。
編集: clientSentence = d.readLine(); でサーバーがフリーズすることがわかりました。部。理由はありますか?