У меня была странная проблема с java, при работе с сокетами я создал case LOGOUT:
(283) для сервера для обработки (клиент отправляет разные целые числа, чтобы указать запрос на обслуживание серверу), но в моем переключателе случай LOGOUTбыл недоступен по какой-то причине (IntelliJ сказал мне, что это заявление было недоступно).Поэтому я попробовал System.out.println(ServiceId)
, и это всегда было другое (не случайное) число из 283, это было действительно странно.Я решил эту проблему, изменив номер.Очевидно, что число 283 не было ни в одной другой переменной.Может ли это быть Java, которая использует окончательный статический int со значением 283 для чего-то еще?
PS: Может ли быть так, что коммутатор имеет максимальное число операторов, где это число меньше 283?
private static void getService(Socket s) throws IOException {
InputStream inputStream = s.getInputStream();
int servId = inputStream.read();
OutputStream outputStream = s.getOutputStream();
Runnable task;
System.out.println("***************** " + servId); // this servID should be the number 283 but it's not.
switch(servId) {
case REPLY_EMAIL:
case FORWARD_EMAIL:
case REPLY_ALL_EMAIL:
case WRITE_EMAIL:
outputStream.write(SUCCESS_RESPONSE);
task = new EmailReceiver(s,lock, servId, serverLog);
threadPool.execute(task);
break;
case LOGOUT:
outputStream.write(SUCCESS_RESPONSE);
threadPool.execute(new Runnable() {
@Override
public void run() {
try {
String user = Utils.getUser(s);
serverLog.writeLog("L'utente " + user + " si è disconnesso.");
} catch (IOException e) {
e.printStackTrace();
}
}
});
break;
case READ_ALL_EMAILS:
outputStream.write(SUCCESS_RESPONSE);
task = new EmailReader(s, serverLog);
threadPool.execute(task);
break;
case USER_LIST:
outputStream.write(SUCCESS_RESPONSE);
task = new UserGetter(s, serverLog);
threadPool.execute(task);
break;
case LOGIN:
outputStream.write(SUCCESS_RESPONSE);
task = new UserLogin(s, serverLog);
threadPool.execute(task);
break;
case DELETE_EMAIL:
outputStream.write(SUCCESS_RESPONSE);
task = new EmailDelete(s, serverLog);
threadPool.execute(task);
break;
case NOTIFICATION:
outputStream.write(SUCCESS_RESPONSE);
task = new Notificator(s, serverLog);
threadPool.execute(task);
break;
default:
serverLog.writeLog("Errore di Richiesta");
outputStream.write(FAILURE_RESPONSE);
break;
}
}
package common;
public class ServiceID {
public static final int WRITE_EMAIL = 84;
public static final int READ_ALL_EMAILS = 50;
public static final int FORWARD_EMAIL = 94;
public static final int REPLY_EMAIL = 95;
public static final int REPLY_ALL_EMAIL = 96;
public static final int DELETE_EMAIL = 100;
public static final int LOGIN = 11;
public static final int USER_LIST = 111;
public static final int SUCCESS_RESPONSE = 1;
public static final int FAILURE_RESPONSE = -1;
public static final int NOTIFICATION = 118;
public static final int EMAIL_NOT_FOUND = 404;
public static final int LOGOUT = 283;
}
эти 2 фрагмента кода являются функциями, в которых я получаю ServiceID из InputStream.Другой класс - это все возможные номера serviceID.Не пишите: «вы, вероятно, неверно передали serviceID», потому что это не так, все остальные ServiceID работают правильно.