Проблемы с пониманием инициализации входных и выходных потоков в приложении сервер-клиент - PullRequest
0 голосов
/ 26 ноября 2018

Я пишу клиент-серверное приложение, в котором Client запрашивает файл, и если Server находит его, он отправляет файл на Client.Я использую ObjectInputStream и ObjectOutputStream для отправки и получения всех сообщений между ними.Мое приложение на самом деле работает просто найти, но я надеялся, что кто-то может объяснить часть этого, что я считаю не очень интуитивно понятным.

Я инициализирую клиента ObjectOutputStream и ObjectInputStream следующим образом:

private void setupStreams() throws IOException{
    //initialize output
    output = new ObjectOutputStream(socket.getOutputStream());
    output.flush();

    //initialize input
    input = new ObjectInputStream(socket.getInputStream());
    System.out.println("Client streams initialized...");
}

Эта часть имеет смысл для меня, потому что позже в приложении, когда я хочу отправить информацию из этого Client к Server я использую output.writeObject().Меня смущает то, что после того, как мой Server принимает соединение Client с ServerSocket, я инициализирую ObjectInputStream и ObjectOutputStream следующим образом:

private void setupStreams() throws IOException{
    output = new ObjectOutputStream(clientSocket.getOutputStream());
    output.flush();

    input = new ObjectInputStream(clientSocket.getInputStream());
    System.out.println("Server streams initialized...");
}

Здесь, похоже,мне как будто я инициализирую вывод Server тем же OutputStream, к которому я инициализировал клиента, так как clientSocket - это сокет, возвращаемый методом ServerSocket.accept().Интуитивно я чувствую, что должен инициализировать Server ObjectOutputStream для clientSocket ObjectInputStream, поэтому я отправляю сообщения Client InputObjectStream.

Очевидно, что если я пытаюсь получить ошибку компиляции, чтобы я знал, что это не так, но думаю, мне просто интересно, есть ли что-то, что я пропускаю?или, может быть, что-то происходит под капотом, о котором я не знаю?

Если кто-то нуждается в разъяснениях или хочет увидеть больше частей кода, чтобы понять, пожалуйста, спросите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...