1

如何在 switch 语句中将操作返回到 while 循环?客户端无法返回 while 语句。我的意思是说,每当响应来自服务器时,客户端必须再次从while循环开始,以便客户端可以选择他的选择。是 System.out 的问题吗?(注意:这是从其他人那里复制的代码)这是客户端和服务器:

客户:

    .............
while (true) {
       String userchoice = console.readLine("Enter your choice :"); 
       int choice= Integer.parseInt(userchoice);
      switch (choice){  
    ..........
    case 2: // for viewing files in the client's directory
      try{
      Socket mysoc = new Socket("localhost", 9001);
      String user_name = username;
      DataOutputStream ToServer = new DataOutputStream(mysoc.getOutputStream());
      ToServer.writeBytes(user_name + '\n');
      BufferedReader FromServer = new BufferedReader(new InputStreamReader(mysoc.getInputStream()));
      String line = null;
      while ((line = FromServer.readLine()) != null) {
       System.out.println(line);
      } 
     }
    catch(Exception e)
            {
                e.printStackTrace();
                System.exit(0);
            }
      break;
      ............
}

服务器:

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

class DirList
{
   public static void main(String argv[]) throws Exception
      {
         String clientString;
         //String replyString;
         ServerSocket welcomeSoc = new ServerSocket(9001);

         while(true)
         {
            Socket connectionSocket = welcomeSoc.accept();
            BufferedReader FromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            PrintWriter ToClient = new PrintWriter(connectionSocket.getOutputStream(),true);
            clientString = FromClient.readLine();
            System.out.println("Received view songs request from : " + clientString);
            String path = "/home/sri/Songs/";
            String text="";
            File f = new File(path);
                File[] listOfFiles = f.listFiles();
                for (int j = 0; j < listOfFiles.length; j++) {
                        if (listOfFiles[j].isFile()) {
                                text = listOfFiles[j].getName();
                                ToClient.println(text);
                   }
                }


         }
      }
}
4

2 回答 2

1

你为什么不label最外面while这样..

outer: while(true)

并使用continue关键字返回标签。

continue outer;

于 2012-10-13T07:00:54.410 回答
0

在他们完成任务后尝试close你的PrintWriterSocket在代码中。Server

@Sri,关于您在评论中提出的问题:

我的意思是套接字connectionSocketServerSocket将在您的服务器生命周期内保留在那里。但是您将为connectionSocket每个用户提供一个新的。所以每个 connectionSocket 将只服务一个客户端。

于 2012-10-13T07:15:29.553 回答