• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[JAVA] - ObjectInputStream StreamCorruptedException: invalid type code: AC

VPS Starter Arubacloud
0 głosów
467 wizyt
pytanie zadane 20 stycznia 2019 w Java przez ILikeJava Obywatel (1,230 p.)

Witam. Mam takie dwie metody:

Klient:

public boolean sendMessage(String message) {
        try {
            output = new ObjectOutputStream(signMethods.getSocket().getOutputStream());
            output.writeObject(new Message(PING));

            input = new ObjectInputStream(signMethods.getSocket().getInputStream());
            Message pong = (Message) input.readObject();

            if (pong.getHeader() == PONG) {
                output.writeObject(new Message(CONFIG, message));
                return true;
            }
            output = null;
            input = null;
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return false;
    }

 

Serwer:

public void run() {
        while (true) {
            try {
                if (socket.isConnected()) {
                    input = new ObjectInputStream(socket.getInputStream());
                    Message ping = (Message) input.readObject();//tu coś

                    if (ping.getHeader() == PING) {
                        output.writeObject(new Message(PONG));
                        System.out.println(1);
                        Message message = (Message) connector.getInput().readObject();
                        System.out.println(message.getMessage());
                    }
                }
            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

Wysyłany obiekt implementuje Serializable. W konsoli serwera pojawia się błąd:

java.io.StreamCorruptedException: invalid type code: AC
	at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1615)
	at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
	at app.classes.users.User.run(User.java:63)
	at java.base/java.lang.Thread.run(Thread.java:844)

Szukałem w googlu ale nie znalazłem nic. Nie spotkałem się wcześniej z takim błędem. Z góry dzięki za pomoc.

komentarz 20 stycznia 2019 przez mbabane Szeryf (79,280 p.)
Tylko taki stack błędu dostajesz czy coś więcej jest?

Pokaż klasę Message.
komentarz 20 stycznia 2019 przez ILikeJava Obywatel (1,230 p.)

Tak, tylko taki stack.

 

package app.message;

import java.io.Serializable;

public class Message implements Serializable {

    private Header header;
    private String message;
    private String recipient;
    private String author;

    private Message() {}

    public Message(Header header) {
        this.header = header;
    }

    public Message(Header header, String message) {
        this.header = header;
        this.message = message;
    }

    public Message(Header header, String message, String recipient) {
        this.header = header;
        this.message = message;
        this.recipient = recipient;
    }

    public Message(Header header, String message, String recipient, String author) {
        this.header = header;
        this.message = message;
        this.recipient = recipient;
        this.author = author;
    }

    public Header getHeader() {
        return header;
    }

    public String getMessage() {
        return message;
    }

    public String getRecipient() {
        return recipient;
    }

    public String getAuthor() {
        return author;
    }
}

 

 

1 odpowiedź

0 głosów
odpowiedź 20 stycznia 2019 przez mbabane Szeryf (79,280 p.)
Jedyne co mi przychodzi do głowy to to, że Message ma prywatny domyślny konstruktor, zrób go publiczny albo protected.
komentarz 20 stycznia 2019 przez mbabane Szeryf (79,280 p.)
Inna rzecz jaka mi przychodzi do głowy to taka, że jest to w pętli nieskończonej i na końcu przypisywane są do input i output nulle, a następnie tworzone są nowe obiekty - być może to jest problemem.
komentarz 21 stycznia 2019 przez ILikeJava Obywatel (1,230 p.)
Mógłbyś looknąć na te repo tych projektów na GitHubie (?)  bo tak trudno ogarnąć to tylko na forum, a pojawiają się różne błędy. Kilka razy nawet się wszytko wysłało ale był to null. Linki:

Klient: https://github.com/Gandalfel/Client-1.2 - klasa, metoda w której występuje problem ChatMethods, sendMessage()

Serwer: https://github.com/Gandalfel/Chat-Server/tree/temp  - klasa, metoda w której występuje problem User, run()
komentarz 22 stycznia 2019 przez mbabane Szeryf (79,280 p.)
Jasne, ale najwcześniej w piątek będę mógł to zrobić.
komentarz 25 stycznia 2019 przez ILikeJava Obywatel (1,230 p.)
Już rozwiązałem. Problem nie był w socketach ale w moim niedopatrzeniu.
komentarz 25 stycznia 2019 przez mbabane Szeryf (79,280 p.)

Taka sugestia, na githubie itp. staraj się umieszczać tylko folder src plus ewentualnie pomy itp. rzeczy. Chodzi o to aby nie umieszczać tam plików związanych z danym IDE. Dzięki temu można sobie bez problemu sklonować projekt używając dowolnego IDE.

 

Unikaj komentarzy w kodzie, opisujacych kod:

/*
Wysyłanie wszytskich informacji do Usera
 */

Jeśli kod wymaga komentarza to znaczy, że można coś wydzielić np. do innej metody, której to nazwa będzie jednocześnie opisem. W tym przypadku np. może da się utworzyć metodę o nazwie: sendInformationToAllUsers().

Podobne pytania

+1 głos
1 odpowiedź 97 wizyt
pytanie zadane 11 stycznia w Java przez Specjalny Nowicjusz (230 p.)
0 głosów
2 odpowiedzi 284 wizyt
pytanie zadane 3 sierpnia 2019 w Java przez msky Początkujący (250 p.)
0 głosów
1 odpowiedź 430 wizyt
pytanie zadane 15 stycznia 2019 w Java przez ILikeJava Obywatel (1,230 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...