0

より高度なサーバーからクライアントへのプログラムを作成しようとしていますが、問題が発生しました。私はなんとかクライアントにパスワードを入力するように頼みました、そしてfalseの場合、それはクライアントを拒否します。

ただし、サーバーにwhile条件を追加してみました。クライアントが間違ったパスワードを入力した場合は、パスワードを再入力するように依頼してください。しかし、私はスキャナーを使用しようとしましたが、エラーが発生するため、それが解決策ではないと思います。

サーバ側:

 while(pw.equals("PASS")){
        toClient.writeBytes("This pw " + pw + " is correct. Access granted! " + "\n");
        }
        toClient.writeBytes("Your password... " + pw + " is wrong. Please retry.");
        pw = fromClient.readLine();
        toClient.writeBytes(pw+ "\n");
   }

クライアント側:

    System.out.print("Enter your password: ");
        myPass = fromUser.readLine();

        toServer.writeBytes(myPass + "\n");

        myPass = fromServer.readLine();
        System.out.println(myPass);

コードはかなり長いです。しかし、すべてが機能します。接続が設定され、ポート番号は同じです。唯一の問題は、正しいまでクライアントにパスワードを再入力させ続けることができないことです。

クライアントに対してもwhileループを作成する必要がありますか?よくわかりません...

4

2 に答える 2

1

1番目:サーバー側にwhileループがあるのはなぜですか?

2番目:@ j0chnによって提案されたように、クライアント側でフラグを使用するループは、これを行う正しい方法です。

于 2013-03-10T22:19:09.263 に答える
0

ループを存続させるためにブール値を使用するループをお勧めします。
このようなもの:

boolean isCorrect = false;
System.out.print("Enter your password: "); 
while(!isCorrect){
    myPass = fromUser.readLine();

    toServer.writeBytes(myPass + "\n");

    if(myPass == fromServer.readLine()){
        isCorrect = true;
    }
    myPass = fromServer.readLine();

    System.out.println(myPass);
}

多分あなたはこの部分を変更しなければなりません:

if(myPass == fromServer.readLine()){

に:

if(myPass.equals(fromServer.readLine()){

しかし、多くの可能性があることを忘れないでください。

お役に立てば幸いです。

于 2013-03-10T22:02:36.737 に答える