我正在尝试创建一个共享java应用程序的文件。 我正在制作两个独立的项目,即服务器和客户端。服务器端存储了文件,客户端可以请求从服务器下载文件,或者将文件上传到服务器,或从服务器检索文件列表。
我在从服务器检索文件时遇到问题。我已经创建了一个检索文件的方法,但是当该方法运行时,程序会挂起,没有任何响应。
这是我检索文件的代码(很明显,对于客户端):
public void retrieveFileData() throws IOException {
Socket theSocket = new Socket(this.theHostIP, this.portNumber);
PrintWriter messageWriter = new PrintWriter(theSocket.getOutputStream(),
true);
messageWriter.write("REFRESH");
BufferedReader filesReader = new BufferedReader(new InputStreamReader(
theSocket.getInputStream()));
this.retrievedFiles = filesReader.readLine();
theSocket.close();
}
这是服务器端的代码:
ServerSocket theServerSocket = new ServerSocket(this.portNumber);
Socket theClientSocket = theServerSocket.accept();
BufferedReader inputReader = new BufferedReader(new InputStreamReader(
theClientSocket.getInputStream()));
PrintWriter outputWriter = new PrintWriter(
theClientSocket.getOutputStream(), true);
String line = inputReader.readLine();
while (true) {
if (line.startsWith("REFRESH")) {
System.out.println("received refresh request...");
outputWriter.write(this.filesToSend);
}
所以,基本上,客户端发送一条简单的消息告诉服务器它想要什么(在这种情况下,“REFRESH”来检索文件列表),服务器应该通过其输出编写器将它提供给客户端。 p>
我做错了什么?我怀疑问题是在客户端,因为“收到刷新请求...”不会在控制台中打印。
感谢。
答案 0 :(得分:1)
我认为这是因为PrintWriter messageWriter没有刷新。 我会尝试。
messageWriter.println("REFRESH");
messageWriter.flush();