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"));
...
}