Я пишу клиент-серверное приложение, в котором 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
.
Очевидно, что если я пытаюсь получить ошибку компиляции, чтобы я знал, что это не так, но думаю, мне просто интересно, есть ли что-то, что я пропускаю?или, может быть, что-то происходит под капотом, о котором я не знаю?
Если кто-то нуждается в разъяснениях или хочет увидеть больше частей кода, чтобы понять, пожалуйста, спросите.