Мне нужно, чтобы клиент мог получать несколько сообщений с сервера - PullRequest
0 голосов
/ 27 апреля 2019

Я работаю над базовым соединением клиент-сервер. Этот код работает отлично, но клиент может только отправить 1 сообщение и получить его модификацию перед закрытием соединения. как мне сделать так, чтобы отправлять и получать несколько сообщений?

Я думал об использовании цикла while, но не знал, как правильно его реализовать. Мне нужно иметь возможность отправлять более 1 сообщения, чтобы иметь согласованное соединение

Приведенный ниже код представляет собой клиент, отправляющий строку на сервер, и сервер переводит ее в верхний регистр.

//Server:
public class TCPServer {

    public static void main(String argv[]) throws Exception 
    {
       String clientSentence;
       String capitalizedSentence;

       ServerSocket welcomeSocket = new ServerSocket(6789);
       while(true)
                    {
           Socket connectionSocket = welcomeSocket.accept(); 

           BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
           DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 

           clientSentence = inFromClient.readLine();

           capitalizedSentence = clientSentence.toUpperCase() + '\n';
           outToClient.writeBytes(capitalizedSentence);

           if(clientSentence.toUpperCase().trim().contentEquals("QUIT")) {
               connectionSocket.close();
               }
           }
       }
    }

//Client:
public class TCPClient {

    public static void main(String argv[]) throws Exception
    { 
        String sentence;
        String modifiedSentence;
        Socket clientSocket = new Socket("LocalHost", 6789);

        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

        DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        System.out.print("Enter characters to be capitalized: ");
        sentence = inFromUser.readLine(); 
        outToServer.writeBytes(sentence + '\n'); 
        modifiedSentence = inFromServer.readLine(); 

        System.out.println("FROM SERVER: " + modifiedSentence);
        }
    }

вывод для этого кода:

Enter characters to be capitalized: hi
FROM SERVER: HI

1 Ответ

0 голосов
/ 27 апреля 2019

Ваш сервер может получать только одно сообщение от каждого клиента, потому что в вашем цикле while на каждой итерации вы вызываете welcomeSocket.accept(). Это означает, что код вашего сервера останавливается, пока не получит новое клиентское соединение.

Рекомендуется использовать многопоточность, если вы хотите, чтобы ваш сервер поддерживал несколько клиентов. Например, взгляните: на этот пост

...