Java Exception - Сокет закрыт, надежная помощь udp? - PullRequest
0 голосов
/ 08 декабря 2011

В настоящее время я использую Java-реализацию протокола Reliable UDP, который можно найти здесь [1]. В проекте нет абсолютно никаких учебных пособий, поэтому мне было очень трудно определить проблемы.

Я настроил клиент и сервер. Сервер работает на локальном хосте: 1234, а клиент - на локальном хосте: 1235. Сервер сначала устанавливается и прослушивает соединения.

Затем я настроил его отправку пакета на сервер. При отправке пакета сервер вызывает handlePacket () -

DataInputStream i = new DataInputStream(client.getSocket().getInputStream());
            short packetID = i.readShort();
            i = null;
            switch(packetID){
                case 3:
                    Packeta packeta = new Packeta(client);
                break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

В настоящее время я использую отладку с небольшим фиктивным классом под названием Packeta. Когда конструктор вызывается, он читает из потока и логи на консоль. Однако всегда при построении зависает на 10 секунд, прежде чем выдает ошибку -

java.net.SocketException: сокет закрыт ....
в lessur.engine.net.packets.Packeta. (Packeta.java:15)

Конструктор для Packeta -

public Packeta(LessurConnectedNode c) {
        super((short)3, c);
        try {
            /*LINE 15*/ Logger.getLogger("adsfas").info("X was "+c.getSocket().getInputStream().read());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

В нем есть что-то связанное с входными потоками. Я не знаю, что не так, но при чтении других тем может возникнуть проблема с несколькими входными потоками. Я заблудился в этом, пожалуйста, помогите.

1 Ответ

0 голосов
/ 08 декабря 2011

Проблема заключалась в том, что я передавал сервер слушателю сокета до того, как сокет был полностью инициализирован. ИСПРАВЛЕНО!

...