Я кодирую один сервер и несколько клиентов в JAVA. Это мой код для сервера. И это мой код для клиента.
Более конкретно, у меня есть следующий код на моем сервере.
String Name;
try {
os.println("Enter Your Name:");
Name=is.readLine();
os.println("Hello "+ Name +" Welcome To Our Exam System.Please type Exam to take an Exam or type QUIT to Exit");
line=is.readLine();
while(line.compareTo("QUIT")!=0){
os.println(line);
os.flush();
System.out.println("Response to Client : "+line);
line=is.readLine();
}
} catch (IOException e) {
line=this.getName(); //reused String line for getting thread name
System.out.println("IO Error/ Client "+line+" terminated abruptly");
}
catch(NullPointerException e){
line=this.getName(); //reused String line for getting thread name
System.out.println("Client "+line+" Closed");
}
ANd следующий код в client.java
try {
s1=new Socket(address, 4445); // You can use static final constant PORT_NUM
br= new BufferedReader(new InputStreamReader(System.in));
is=new BufferedReader(new InputStreamReader(s1.getInputStream()));
os= new PrintWriter(s1.getOutputStream());
}
catch (IOException e){
e.printStackTrace();
System.err.print("IO Exception");
}
System.out.println("Client Address : "+address);
System.out.println("Enter Data to echo Server ( Enter QUIT to end):");
String response=null;
try{
response=is.readLine();
System.out.println(response);
line=br.readLine();
os.println(line);
response=is.readLine();
line=br.readLine();
while(line.compareTo("QUIT")!=0)
{
os.println(line);
os.flush();
response=is.readLine();
System.out.println("Server Response : "+response);
line=br.readLine();
}
}
catch(IOException e){
e.printStackTrace();
System.out.println("Socket read Error");
}
Из этого кода я жду следующей задачи:
Затем сервер выполнит следующую строку: os.println("Hello "+ Name +" Welcome To Our Exam System.Please type Exam to take an Exam or
введите" QUIT to Exit ");
Но после установления соединения никакое сообщение типа "Введите свое имя" не отправляется с сервера на клиент
Зачем?
Добавьте следующую строку после сервера, LINE 68:
клиент покажет ожидаемое "Введите свое имя".
И сервер, и клиент ждут ввода, тем самым сидя в тупике. Вы должны называть os.flush(), чтобы фактически передать ваши данные на сервер.
Ваш код сервера записывается на вывод, но не отправляет его:
Затем клиент зависает, потому что сервер не отправил его через os.flush():
пока ваш сервер также ждет ответа клиентов на
Источником команды os.flush был этот пример кода: qaru.site/questions/244734/...