0
JavaでI/Oを学びたいと思っていますが、この問題に長年悩まされていました....私のサーバー側を実行した後、私はクライアント側を実行します。問題は、両方の数値を入力すると、サーバーから値が返されず、ループを実行して値を入力できるようになることです。デバッグしてどのような接続が無効であるかを調べる方法がわかりません。基本I/Oプログラム
public class Client {
public static void main(String[] args) throws Exception {
Socket soc = new Socket("localhost", 9806);
BufferedReader userInput = new BufferedReader(new InputStreamReader((System.in)));
BufferedReader in = new BufferedReader(new InputStreamReader((soc.getInputStream())));
PrintWriter out = new PrintWriter(soc.getOutputStream(), true);
int option = 0;
int num1 = 0;
int num2 = 0;
do {
System.out.println("Choose an operation");
System.out.println("1 Addion");
System.out.println("2 Subtraction");
System.out.println("3 Multiplication");
System.out.println("4 Division");
System.out.println("Enter an option");
option = Integer.parseInt(userInput.readLine());
System.out.println("Enter number");
num1 = Integer.parseInt(userInput.readLine());
System.out.println("Enter number");
num2 = Integer.parseInt(userInput.readLine());
out.println(option + ":" + num1 + ":" + num2);
String answer = in.readLine();
System.out.println("Server says: " + answer);
} while(true);
}
}
サーバー側:
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(9806);
System.out.println("Waiting for client");
Socket soc = ss.accept();
System.out.println("Connection established");
BufferedReader in = new BufferedReader(new InputStreamReader(soc.getInputStream()));
PrintWriter out = new PrintWriter(soc.getOutputStream(), true);
while(true){
String str[] = in.readLine().split(":");
int option = Integer.parseInt(str[0]);
int num1 = Integer.parseInt(str[1]);
int num2 = Integer.parseInt(str[2]);
String result = "";
switch(option) {
case 1: result = "Addition is: " + (num1 + num2);break;
case 2: result = "Subtraction is: " + (num1 - num2);break;
case 3: result = "Multiplication is: " + (num1 * num2);break;
case 4: result = "Division is: " + (num1/num2);break;
default: break;
}
out.print(result);
}
}
}
ありがとうございました!
タイプミス:
は、このコードを参照してください。 'println'で自動塗りつぶしを認識しているようですが、' out.println(result);の代わりに 'out.print(result);'を使った 'Server'クラスでは、フラッシングはありませんでした。 – Pshemo
クライアントのin.readLine()でブロックされているようです。 –
あなたはPshemoを高速化していました。 Out.printをout.printlnに修正すると正しいです。 –