сообщение не отправляется с сервера клиенту на одном сервере - несколько клиентов в Java

1

Я кодирую один сервер и несколько клиентов в 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");
    }

Из этого кода я жду следующей задачи:

  1. Первоначально установлено соединение между сервером и клиентом
  2. Сообщение будет отправлено с сервера на клиент с именем "Введите свое имя",
  3. Этот msg будет напечатан в консоли клиентов.
  4. От клиента имя будет отправлено на сервер.
  5. Затем сервер выполнит следующую строку: os.println("Hello "+ Name +" Welcome To Our Exam System.Please type Exam to take an Exam or введите" QUIT to Exit ");

  6. Но после установления соединения никакое сообщение типа "Введите свое имя" не отправляется с сервера на клиент

Зачем?

Теги:
networking

1 ответ

1
Лучший ответ

Добавьте следующую строку после сервера, LINE 68:

  • os.flush()

клиент покажет ожидаемое "Введите свое имя".

И сервер, и клиент ждут ввода, тем самым сидя в тупике. Вы должны называть os.flush(), чтобы фактически передать ваши данные на сервер.

Ваш код сервера записывается на вывод, но не отправляет его:

  • Сервер, LINE 68: os.println("Введите свое имя:");

Затем клиент зависает, потому что сервер не отправил его через os.flush():

  • Клиент, LINE 37: response = is.readLine();

пока ваш сервер также ждет ответа клиентов на

  • Server, LINE 69: Name = is.readLine();

Источником команды os.flush был этот пример кода: qaru.site/questions/244734/...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню