2013-03-10 110 views
0

我試圖創建更高級的服務器到客戶端程序,但我偶然發現了一個問題。我設法要求客戶輸入密碼,如果不是,則拒絕客戶。Java - 從服務器再次向客戶端請求密碼

但是,我試着給服務器添加一段時間的條件:如果客戶端輸入錯誤的密碼,然後讓他/她重新輸入密碼。但我嘗試使用掃描儀,但不認爲這是解決方案,因爲我收到錯誤。

服務器端:

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循環呢?我不太確定...

回答

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()){ 

但要記住,有很多的可能性。

我希望它能幫助你。

+0

我想知道爲什麼你低估了我的答案。所以我可能會改進我的下一個答案(或者至少是這個答案)! – j0chn 2013-03-10 22:06:48

+0

感謝您的回覆。我會嘗試一下。我沒有downvote,但我會upvote你的支持:) – Dembele 2013-03-10 22:26:47

+0

對不起,讓我回到你身邊。我終於設法解決了這個問題,並帶了一些試驗和錯誤。我沒有使用布爾值,而是爲客戶端使用了一個while循環。但它現在不斷要求密碼。 TY再次! – Dembele 2013-03-10 23:54:09

1

1st:爲什麼服務器端有while循環?

第二:在@ j0chn建議的客戶端使用標誌的循環是正確的方法。

+0

我使用了一個while循環,因爲服務器爲客戶端保存了正確的密碼。如果客戶端輸入密碼並且與服務器中的密碼不匹配,則拒絕訪問。但是,這就是我解釋它應該如何工作的。也許我錯了,你能否詳細說明爲什麼? TY – Dembele 2013-03-10 22:31:18

+0

不應該以「訪問被拒絕」的方式工作嗎?當訪問被拒絕時,客戶端循環應該處理它並照顧它 – gashu 2013-03-11 06:25:00

+0

我看到你從哪裏來!基本上,服務器保存密碼。客戶端包含循環,並且如果客戶端發送的密碼不匹配,則它將循環直到密碼最終匹配服務器的密碼。 如果我想拒絕服務的客戶,如果他們輸入密碼錯誤。這仍然是在客戶端,還是在服務器的? – Dembele 2013-03-11 15:11:39

相關問題