我正在编写一个客户端服务器应用程序,其中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
的{{1}}连接之后,我像这样初始化了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
的{{1}} 。
很明显,如果我尝试得到一个编译错误,那么我知道它不是那样做的,但是我想我只是想知道我是否缺少某些东西?还是我不了解的事情正在发生?
如果任何人需要澄清或想要查看代码的更多部分以进行理解,请询问。