0

我正在尝试制作一个文件共享 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”来检索文件列表)并且服务器应该将它的输出写入器提供给客户端。

我究竟做错了什么?我怀疑问题出在客户端,因为“收到的刷新请求......”没有在控制台中打印。

谢谢。

4

1 回答 1

1

我认为这是因为 PrintWriter messageWriter 没有刷新。我会尝试。

 messageWriter.println("REFRESH");
 messageWriter.flush();
于 2013-11-03T06:15:42.143 回答