为什么我的应用程序不输入我的if语句 [英] Why isn't my application entering my if statement

查看:57
本文介绍了为什么我的应用程序不输入我的if语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试用Java编写控制台客户端-服务器应用程序;使用套接字,我目前有一个简单的登录系统和一个简单的命令系统。尽管它会向客户端打印无效的用户名和密码行,但无论用户是否输入正确的凭据,登录系统似乎都可以正常工作。 -连接肯定可以正常工作。

I'm trying to write a console client-server application in Java; using sockets, I currently have a simple login system and a simple command system. The login system appears to work, although it prints the "Invalid username and password" line to the client, regardless whether the user inputs correct credentials. - The connection is definitely working.

但是,命令系统似乎根本不起作用,当服务器收到命令时,它似乎没有发送

However, the command system does not seem to function at all, when the command is received by the server, it does not appear to send anything back.

所以我的主要问题是:为什么服务器在收到命令后没有将任何东西发回客户端?

So my main question is why doesn't my server send anything back to the client when the command is received?

这是我的服务器:

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 Command;
    String username;
    String username1;
    String password;
    String password1;
    String cmd;
    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("\nUsername received: " + username);
        password = inFromClient.readLine();
        System.out.println("\nPassword received: " + password);
        username1=username.toUpperCase();
        password1=password.toUpperCase();


        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("\nOther users registered on the server currently include: \n");

                for(int k = 0; k<Login.length; k++)
                {
                    outToClient.writeBytes(Login[k][0]);
                    }
            }
            else {
                outToClient.writeBytes("Invalid Username and/or password.\n");
            }
            }
                        BufferedReader inFromClient2 =
           new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
        DataOutputStream outToClient2 = new DataOutputStream(connectionSocket.getOutputStream());
        Command = inFromClient2.readLine();
        System.out.println("\nCommand received: " + Command);


if(Command.equals("listTranslations"))
{
outToClient2.writeBytes("English,Thai,Geordie,etc.");
}
else
{
if(Command.equals("getCost"))
{
outToClient2.writeBytes("£100\n");
}
else
{
outToClient2.writeBytes("Invalid Command");
}
}

}

    }
}

这是我的客户:

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

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

     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);
     loginInfo2 = inFromServer.readLine();
     System.out.println(loginInfo2);
     loginInfo3 = inFromServer.readLine();
     System.out.println(loginInfo3);

     System.out.println("Please enter a command: ");
     command = inFromUser.readLine();
     outToServer.writeBytes(command);

     commandInfo = inFromServer.readLine();
     System.out.println(commandInfo);
     commandInfo2 = inFromServer.readLine();
     System.out.println(commandInfo);



     clientSocket.close();
 }
}

这是我第一次问有关stackoverflow的问题,但是我过去浏览过很多。因此,我只想对您提供的社区表示感谢。

This is my first time asking a question on stackoverflow, but i've browsed it a lot in the past. So I just wanted to also say thank you for the great community you provide.

推荐答案

这是我评论的延续:

这是我要这样做的方式,首先我要替换为: String [] [] Login = {{ MATT, UNCP },{ JOHN, UNCP},{ CARL, UNCP}}}; 通过类似的方式:

This is how I would do it, first I would replace this: String[][] Login = {{"MATT","UNCP"},{"JOHN","UNCP"},{"CARL","UNCP"}}; by something like so:

Map<String, String> userDetails = new HashMap<String, String>();
userDetails.put("MAT", "UNCP");
userDetails.put("JOHN","UNCP"); 
userDetails.put("CARL", "UNCP");

然后,代替此:

 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("\nOther users registered on the server currently include: \n");

                for(int k = 0; k<Login.length; k++)
                {
                    outToClient.writeBytes(Login[k][0]);
                    }
            }
            else {
                outToClient.writeBytes("Invalid Username and/or password.\n");
            }
        }

我会这样做:

if (userDetails.get(username1).equals(password1))
{
    outToClient.writeBytes("Hello " + username1);
                outToClient.writeBytes("\nOther users registered on the server currently include: \n");

    for (String str : userDetails.keySet()
    {
         outToClient.writeBytes(str);
    }

}
else
{
    outToClient.writeBytes("Invalid Username and/or password.\n");
}

我所看到的是,系统正在运行并打印无效的凭证字符串,这是因为,假设您提供以下登录详细信息: CARL UNCP ,您正在传递第二组凭据,因此您的循环将检查通过将它们与第一组证书进行比较,然后将它们打印出来,因为它们不匹配,它将打印消息。在第二次迭代中,它将看到该证书与之匹配并登录。

The way I am seeing it, the system is both working and printing the Invalid credentials string is because, assuming you provide these log in details: CARL and UNCP, you are passing the 2nd set of credentials, so your loop will check the credentials by comparing them with the first set and since they do not match, it will print the message. On the second iteration, it will see that the credentials match and will log you in.

有关更多信息,请参见 JavaDoc 。HashMap是一个集合,除了通常的 List Set

For more information take a look at the JavaDoc. HashMap is a collection which is usually a good thing to know about, besides the usual List and Set.

这篇关于为什么我的应用程序不输入我的if语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆