2012-05-03 21 views
2

これは私の初めてのTCPクライアント/サーバープログラムです。私は、クライアント側にユーザ​​名とパスワードを尋ねる簡単なJavaクライアントとサーバプログラムを作ることになっています。そこからサーバは、マルチディメンション配列を使用して作成しようとしたユーザデータベースをチェックして、一致するかどうかを確認し、クライアントに「Hello」(ユーザ名)というメッセージを返し、サーバー上の登録ユーザー。 Java TCPクライアント/サーバーとループの問題

特定の問題しかし、私は2つを実行するたびに、私は一部に到着したとき、サーバーがループを通過することになってたことがあり、表示されているすべてのことは、現在サーバーに登録さ 」他のユーザである私次のものが含まれます。MATTCARLJOHNサーバーに登録されている他のユーザーは、現在次のものを含んでいます。MATTCARLJOHNサーバーに登録されている他のユーザーには、現在MATTCARLJOHN "が含まれています。

私のサーバは私のforループとif文を完全に無視しているようですが、クライアント側のユーザ名とパスワードの入力に関係なく、認証とそのループをまっすぐにスキップすることになっています。 クライアント

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

class TCPClient2 
{ 
    public static void main(String argv[]) throws Exception 
    { 
     String userName; 
     String passWord; 
     String loginInfo; 
     String loginInfo2; 

     BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 
     Socket clientSocket = new Socket("localhost", 6789); 
     DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); 
     BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

     System.out.println("Username: "); 
     userName = inFromUser.readLine(); 
     outToServer.writeBytes(userName + '\n'); 

     System.out.println("Password: "); 
     passWord = inFromUser.readLine(); 
     outToServer.writeBytes(passWord + '\n'); 

     loginInfo = inFromServer.readLine(); 
     System.out.println(loginInfo); 



     clientSocket.close(); 
    } 
} 

とサーバー

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

class TCPServer2 
{ 
    public static void main(String argv[]) throws Exception 
    { 

     ServerSocket welcomeSocket = new ServerSocket(6789); 
     String[][] Login = {{"MATT","UNCP"},{"JOHN","UNCP"},{"CARL","UNCP"}}; 
     String username; 
     String username1; 
     String password; 
     String password1; 
     while(true) 
     { 
      Socket connectionSocket = welcomeSocket.accept(); 
      BufferedReader inFromClient = 
       new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
      DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
      username = inFromClient.readLine(); 
      System.out.println("Username received: " + username); 
      password = inFromClient.readLine(); 
      System.out.println("Password received: " + password); 
      username1=username.toUpperCase() + '\n'; 
      password1=password.toUpperCase() + '\n'; 

      for(int i = 0; i<Login.length; i++){ 
       if(Login[i][0].equals(username1) && Login[i][1].equals(password1)){ 
        outToClient.writeBytes("Hello " + username1); 
        outToClient.writeBytes("Other users registered on the server currently include: "); 
        for(int k = 0; k<Login.length; k++){ 
         outToClient.writeBytes(Login[k][0]);} 
       else 
        outToClient.writeBytes("Invalid Username and/or password."); 
       } 
      } 


     } 
    } 
} 

すべてのヘルプは非常にこれはサイト上で私の初めての投稿で、高く評価されるだろう。ここでは

は、2つのプログラムがあります私はネットワーキングとJavaの一般的な面でとても新しいので、私の質問が混乱するようであれば私を許してください。

ありがとうございます。

答えて

0

実際にコードを実行すると、コードが動作するように見えます。私が見サーバーで

$ java TCPClient -classpath . 
Username: 
blah 
Password: 
blah 

$ java TCPServer -classpath . 
Username received: blah 
Password received: blah 
+0

YAHは、それは、それが大きいだけでなく、私のために動作しているすべてであるため、ループそれは私ですが、それより下しかし、主な問題は、成功したユーザーのログインを認識させることです。 – user1373440

1

をあなたがusername1password1に改行を追加しているクライアント上に表示されます。これらの改行は、ハードコードログイン資格情報("MATT","UNCP")には存在しないので、比較...

if(Login[i][0].equals(username1) && Login[i][1].equals(password1)){ 

が成功したことはありません。

username1password1(少なくともifまで)の改行を省略してください。

ああ、すべてあなたのメッセージのための改行を忘れないでください、FE:

outToClient.writeBytes("Invalid Username and/or password.\n"); 
//              /
//             added the \n 
+0

ありがとう、それはそれを完全に解決しました:D – user1373440

関連する問題