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

彼らが仕事を終えた後、あなたとコードを試しclosePrintWriterみてください。SocketServer

@Sri、コメントで尋ねた質問について:

ソケットで私が意味しconnectionSocketた。ServerSocketサーバーの存続期間中はそこに残ります。connectionSocketただし、ユーザーごとに新しいものがあります。そのため、各 connectionSocket は単一のクライアントのみにサービスを提供します。

于 2012-10-13T07:15:29.553 に答える