私はソケットプログラミングの初心者です。私は、クライアントがユーザからファイル名を受け取り、それをサーバに送るプログラムを書く必要があります。サーバーは対応するファイルを読み取り、その内容をクライアントに送り返します。今私の問題は、サーバープログラムが 'String file = br.readLine()'でフリーズすることです。クライアントプログラムを終了すると、サーバーコードの行がさらに実行されます。私のクライアントコードの最後にwhileループをコメントアウトすると、サーバーコードは完全に正常に動作します(データは標準出力に出力されます)。私のコードで何が間違っているのかを教えてください。 サーバコード:サーバプログラムが 'String file = br.readLine()'という行でフリーズするのはなぜですか?
public class SocketServer {
public static void main(String[] args) throws Exception{
System.out.println("Server is started.");
ServerSocket ss = new ServerSocket(9999);
System.out.println("Server is waiting for a client.");
Socket server = ss.accept();
System.out.println("Client is connected.");
BufferedReader br = new BufferedReader(new InputStreamReader(server.getInputStream()));
String file = br.readLine();
System.out.println("Requested file is: " + file);
OutputStreamWriter os = new OutputStreamWriter(server.getOutputStream());
PrintWriter writer = new PrintWriter(os);
BufferedReader fr = new BufferedReader(new FileReader(file));
String line;
while((line = fr.readLine()) != null) {
writer.write(line);
writer.flush();
System.out.println(line);
}
}
}
クライアントコード:それは新しい行を見つけるまで
public class SocketClient {
public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
Socket client = new Socket("localhost", 9999);
OutputStreamWriter os = new OutputStreamWriter(client.getOutputStream());
PrintWriter writer = new PrintWriter(os);
System.out.print("Enter filename: ");
String file = in.nextLine();
writer.write(file);
writer.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("Content of " + file + ":");
String str;
while((str = br.readLine()) != null) {
System.out.print(str);
}
System.out.println("File transfer is complete.");
}
}
デバッガが必要です。 – notyou
私はデバッガを使用しました。それは私にサーバープログラムがフリーズする行を示しました。 –