Java 为什么我的服务器跳过if语句并转到else部分(重试)?

Java 为什么我的服务器跳过if语句并转到else部分(重试)?,java,serversocket,Java,Serversocket,我的服务器代码 问题在于服务器代码在检查用户名和密码进行登录时,每次都会输出“重试”消息 import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.*; import java.util.ArrayList; //test public class server { public static void main(St

我的服务器代码

问题在于服务器代码在检查用户名和密码进行登录时,每次都会输出“重试”消息

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.*;
import java.util.ArrayList;
//test
public class server {


    public static void main(String[] args) {
        // TODO Auto-generated method stub

        ServerSocket listener;
        int clientid=0;
        try 
        {
             listener = new ServerSocket(10000,10);

             while(true)
             {
                System.out.println("Main thread listening for incoming new connections");
                Socket newconnection = listener.accept();

                System.out.println("New connection received and spanning a thread");
                Connecthandler t = new Connecthandler(newconnection, clientid);
                clientid++;
                t.start();
             }

        } 

        catch (IOException e) 
        {
            System.out.println("Socket not opened");
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}


class Connecthandler extends Thread
{

    Socket individualconnection;
    int socketid;
    ObjectOutputStream out;
    ObjectInputStream in;
    String message;


    public Connecthandler(Socket s, int i)
    {
        individualconnection = s;
        socketid = i;
    }

    void sendMessage(String msg)
    {
        try{
            out.writeObject(msg);
            out.flush();
            System.out.println("client>" + msg);
        }
        catch(IOException ioException){
            ioException.printStackTrace();
        }
    }

    public void run()
    {

        int clubId;
        String clubName;
        String clubEmail;
        int fundsAvailTransfer;
        String agentName;
        int agentId;
        String agentEmail;
        String username;
        int password;
        ClubUser loggedInUser = null;
        try 
        {

            out = new ObjectOutputStream(individualconnection.getOutputStream());
            out.flush();
            in = new ObjectInputStream(individualconnection.getInputStream());
            System.out.println("Connection"+ socketid+" from IP address "+individualconnection.getInetAddress());


            //Commence
            do 
            {
                ArrayList<ClubUser> clubuser = new ArrayList<ClubUser>();
                do
                {
                    sendMessage("Please Enter 1 to Register or 2 to Login");
                    message = (String)in.readObject();
                }while(!message.equals("1")&&!message.equals("2"));

                if(message.equals("1"))
                {

                    sendMessage("Enter 1 to Register Club or 2 to Register Player Agent");
                    message = (String)in.readObject();
                    // Club Registration

                    if(message.equals("1"))
                    {
                    sendMessage("Enter Club Name: ");
                    message = (String)in.readObject();
                    clubName = message;

                    sendMessage("Enter Club Id: ");
                    message = (String)in.readObject();
                    clubId = Integer.parseInt(message);

                    sendMessage("Enter Club Email: ");
                    message = (String)in.readObject();
                    clubEmail = message;

                    sendMessage("Enter Funds Available To Transfer: ");
                    message = (String)in.readObject();
                    fundsAvailTransfer = Integer.parseInt(message);

                    ClubUser cu = new ClubUser(clubId, clubName, clubEmail, fundsAvailTransfer);
                    clubuser.add(cu);

                    for (ClubUser u : clubuser)
                    {
                        System.out.println(u);
                    }// for

                    }// innerif


                }// outerif

                else if(message.equals("2"))
                {
                    sendMessage("Please enter Club Name: ");
                    message = (String)in.readObject();
                    username = message;

                    sendMessage("Please enter Club Id: ");
                    message = (String)in.readObject();
                    password = Integer.parseInt(message);

                    for (ClubUser user : clubuser)
                    {
                        if (user.getClubId()==(password))
                        {
                        if (user.getClubName().equalsIgnoreCase(username))
                        {

                                loggedInUser = user;

                                // when a user is found, "break" stops iterating through the list
                               // break;
                            }
                        }
                    }// for
                     if(loggedInUser != null)
                        {
                            sendMessage("welcome!!!!!! " + loggedInUser.getClubName());
                        }
                     // problem here
                        else
                        {
                            sendMessage("try again ");
                        }


                }// else if


                sendMessage("Y to repeat or N to terminate");

                message = (String)in.readObject();
            }while(message.equalsIgnoreCase("Y"));

        }
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        finally
        {
            try 
            {
                out.close();
                in.close();
                individualconnection.close();
            }


            catch (IOException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }


    }

}
我想做的另一件事是将添加的用户详细信息保存在一个文件中,然后在程序开始时用它们初始化数组。如何执行此操作?

在Connecthandler::run()方法中,尝试将ArrayList“clubUser”移动到最外层do/while的范围之外。这样,它就不会在每次迭代中都被重新初始化

// Place the list initialization here; outside the scope of the outer-most do loop
ArrayList<ClubUser> clubuser = new ArrayList<ClubUser>();
do {
    // remove from here.
    // ArrayList<ClubUser> clubuser = new ArrayList<ClubUser>(); 
    do {
        sendMessage("Please Enter 1 to Register or 2 to Login");
        message = (String) in.readObject();
    } while (!message.equals("1") && !message.equals("2"));

    ...
}
//将列表初始化放在这里;超出最外层do循环的范围
ArrayList clubuser=新的ArrayList();
做{
//离开这里。
//ArrayList clubuser=新的ArrayList();
做{
sendMessage(“请输入1注册或输入2登录”);
.readObject()中的message=(字符串);
}而(!message.equals(“1”)和&!message.equals(“2”);
...
}

而(!message.equals(“1”)| |!message.equals(“2”)您应该提供更多信息来澄清您的问题。请查看以下指南,了解如何对Stackoverflow提出正确的问题:如果我键入了错误的密码,那么sentinel循环将工作,并再次要求注册或登录,输入2个客户端stuck后,服务器将在java.base/java.io.ObjectInputStream$BlockDataInputStream.peekByte处显示java eof errorjava.io.EOFEException(ObjectInputStream.java:3062)在java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1561)在java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)在Connecthandler.run(server.java:192)上
// Place the list initialization here; outside the scope of the outer-most do loop
ArrayList<ClubUser> clubuser = new ArrayList<ClubUser>();
do {
    // remove from here.
    // ArrayList<ClubUser> clubuser = new ArrayList<ClubUser>(); 
    do {
        sendMessage("Please Enter 1 to Register or 2 to Login");
        message = (String) in.readObject();
    } while (!message.equals("1") && !message.equals("2"));

    ...
}