2012-05-03 5 views
2

이것은 처음으로 TCP 클라이언트/서버 프로그램을 만드는 것입니다. 클라이언트 측에 사용자 이름과 암호를 묻는 간단한 Java 클라이언트 및 서버 프로그램을 작성해야합니다. 여기에서 서버는 mulch 차원 배열을 사용하여 생성하려고 시도한 사용자 데이터베이스를 검사하여 일치하는 항목이 있는지 확인하고 클라이언트에게 "Hello"(사용자 이름)를 말하는 메시지를 반환 한 다음 사용자에게 다른 모든 사용자에게 알립니다 서버에 등록 된 사용자. 자바 TCP 클라이언트/서버 및 루프 문제

특정 문제 그러나, 나는 두 가지를 실행할 때마다 나는 부분에 도착하면, 서버는 루프를 통해 이동하도록되어 있다고하고, 표시되는 모든 현재 서버에 등록 "다른 사용자가 내 include : MATTCARLJOHN 서버에 등록 된 다른 사용자는 현재 다음을 포함합니다. MATTCARLJOHN 서버에 등록 된 다른 사용자는 현재 다음을 포함합니다. MATTCARLJOHN ".

내 서버가 내 루프와 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."); 
       } 
      } 


     } 
    } 
} 

이 어떤 도움을 매우 높이 평가 될 것이다 서버, 이건 내 처음 사이트에 게시입니다 나는 네트워킹과 Java에 매우 익숙합니다. 제 질문이 혼란 스러우면 저를 용서해주십시오.

감사합니다.

답변

0

코드는 실제로 실행할 때 작동하는 것처럼 보입니다. 내가 보는 서버에서

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

:

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

야아, 즉, 그것은 큰뿐만 아니라 나를 위해 작동 모든입니다에 대한 루프 그건 내 비록 그 아래에 주요 문제가 있지만 성공적인 사용자 로그인을 인식하도록하는 것입니다. – 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