Java TCP客户端/服务器和循环问题

时间:2012-05-03 19:51:23

标签: java loops client boolean

这是我第一次制作 TCP客户端/服务器程序。我应该创建一个简单的Java客户端和服务器程序,要求客户端提供用户名和密码。从那里服务器检查其用户数据库(我试图使用覆盖维数组创建)以查看是否存在匹配并向客户端返回一条消息“Hello”(用户名),然后告诉用户所有其他服务器上的注册用户。

我的特定问题然而,每当我运行这两个时,当我到达该部分时,服务器应该通过循环,所有显示的是“其他在服务器上注册的用户目前包括: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.");
                }
            }


        }
    }
}

任何帮助都会受到高度赞赏,这是我第一次在网站上发帖,我对网络和Java一般都很陌生,所以如果我的问题看起来很混乱,请原谅我。

谢谢。

2 个答案:

答案 0 :(得分:1)

您要向username1password1添加换行符。这些换行符不存在于硬编码的登录凭据("MATT","UNCP")中,因此比较...

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

永远不会成功。

只需忽略username1password1的换行符(至少在if之后)。

哦,不要忘记所有邮件的换行符,例如:

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

答案 1 :(得分:0)

当我运行代码时,代码实际上似乎对我有用。在客户端上看到:

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

在服务器上我看到:

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