【问题标题】:Sending file list from Server to Client in java Socket programming - PrintWriter can't send?java - 在Java Socket编程中从服务器向客户端发送文件列表-PrintWriter无法发送?
【发布时间】:2012-09-15 09:54:10
【问题描述】:

如何使用 Socket 编程将文件列表从服务器发送到客户端。我使用过 DataOutputStream 和 PrintWriter,它们都只向客户端返回一个文件名。我知道'\n' 中存在一些问题。但无法解决。等待专家建议...谢谢。

客户

switch (choice) {

.......

  case 2: // for viewing files in the client's directory
  Socket mysocket = new Socket("localhost", 6103);
  String user_name = username;
  DataOutputStream outToServer2= new DataOutputStream(mysocket.getOutputStream());
  outToServer2.writeBytes(user_name + '\n');
  BufferedReader inFromServer2 = new BufferedReader(newInputStreamReader(mysocket.getInputStream()));
  String list = inFromServer2.readLine();
  System.out.println("FROM SERVER - LIST OF FILES:" + list);

  break;

}

.......

服务器

import java.io.*;
import java.net.*;

class DirList
{
   public static void main(String argv[]) throws Exception
      {
         String clientSentence;
         String capitalizedSentence;
         ServerSocket welcomeSocket = new ServerSocket(6103);

         while(true)
         {
            Socket connectionSocket = welcomeSocket.accept();
            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            PrintWriter outToClient = new PrintWriter(connectionSocket.getOutputStream(),true);
            clientSentence = inFromClient.readLine();
            System.out.println("Received view files request from user: " + clientSentence);
            String path = "/home/user/Files/";
            String userdir = path + clientSentence;
            String text="";
            String capitalizedSentence1;
            File f = new File(userdir);
                File[] listOfFiles = f.listFiles();
                for (int j = 0; j < listOfFiles.length; j++) {
                        if (listOfFiles[j].isFile()) {
                                text = listOfFiles[j].getName();
                                outToClient.println(text);
                                System.out.print(text+' ');

                   }
                }


         }
      }
}

【问题讨论】:

  • outToClient.println 将其更改为 outToClient.print 并在 for 循环之后刷新输出。
  • @iccthedral 嗨,他们都没有工作:(

标签: java sockets printwriter dataoutputstream


【解决方案1】:

您需要刷新服务器的输出:

outToClient.flush();

另外,在您的客户端中,您需要将读取置于循环中以使用所有输出:

String line = null;
while ((line = inFromServer2.readLine()) != null) {
   System.out.println(line);
}

【讨论】:

  • 这就是我想要的......知道了,非常感谢:)
【解决方案2】:

尝试使用“\r\n”。它可能会解决您的问题。

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 2019-09-16
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多