クライアントクラスとサーバークラスがあります。クライアントがサーバーにメッセージを送信すると、サーバーはクライアントに応答を返し、クライアントは受信したすべてのメッセージを出力します。
例えば、
クライアントがサーバーに「A」を送信すると、サーバーはクライアント「1111」に応答を送信します。したがって、クライアントクラスで readLine() を使用してサーバーからメッセージを読み取り、クライアントがコンソールに「1111」を出力します。
クライアントがサーバーに "B" を送信すると、サーバーはクライアント "2222\n 3333" に応答を送信します。したがって、クライアントからの期待される印刷出力は次のとおりです。
「2222」
「3333」
したがって、サーバーからクライアントへの応答メッセージは、クライアントからサーバーに送信されるメッセージに応じて、1 行または 2 行になる場合があります。
私の質問は、サーバーからクライアントに送信されるメッセージを readLine() を使用して読み取る方法です。具体的には、次のコードを使用すると、
String messageFromServer;
while(( messageFromServer = inputStreamFromServer.readLine()) != null) {
println(messageFromServer);
}
readLine() は最初の行を読み取ると停止するため、クライアントからサーバーにメッセージを送信し続けても、最初の行のみを印刷し、他には何も印刷しません。
更新: より具体的には、サーバーから一度に1行または複数行を含むメッセージを読み取るために、クライアントクラスでいくつかのメソッドを探しています。サーバーからクライアントに送信されるメッセージの形式を変更したくない場合、クライアント側でそれを行う方法があるかどうか疑問に思っています。
更新 2 私の質問をより明確にするために、いくつかのサンプル コードを以下に示します。
これはサーバーです:
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(1234);
} catch (IOException e) {
System.err.println("Could not listen on port: 1234.");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
}
System.out.println("Connected");
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String textFromClient =null;
String textToClient =null;
textFromClient = in.readLine(); // read the text from client
if( textFromClient.equals("A")){
textToClient = "1111";
}else if ( textFromClient.equals("B")){
textToClient = "2222\r\n3333";
}
out.print(textToClient + "\r\n"); // send the response to client
out.flush();
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
クライアント:
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
try {
socket = new Socket("localhost", 1234);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host");
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection");
}
System.out.println("Connected");
String textToServer;
while((textToServer = read.readLine())!=null){
out.print(textToServer + "\r\n" ); // send to server
out.flush();
String messageFromServer =null;
while(( messageFromServer = textToServer=in.readLine()) != null){
System.out.println(messageFromServer);
}
}
out.close();
in.close();
read.close();
socket.close();
}
private static void debug(String msg)
{
System.out.println("Client: " + msg);
}
}