Java не может достичь дела 283 в коммутаторе - PullRequest
0 голосов
/ 03 мая 2019

У меня была странная проблема с 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 работают правильно.

1 Ответ

4 голосов
/ 03 мая 2019

Если InputStream равен java.io.InputStream, возвращаемое значение является 8-битным значением (или -1), поэтому оно не будет совпадать с 283.

публичная аннотация int read () выдает IOException

Считывает следующий байт данных из входного потока. Значение байта возвращается как int в диапазоне 0 до 255. Если байт не доступен, потому что конец потока был достигнут, значение -1 возвращается.

...