Przesylanie danych - strumienie

0

Pierwsze przesłanie od pakietu od serwera do klienta przechodzi bezproblemowo. Przy nastepnych wysłaniach otrzymany pakiet jest caly czas jak ten pierwszy. Jak sobie z tym poradzić?

kod serwera:

    ObjectOutputStream writeStream;

    ...

    writeStream.writeObject(new ServerPackage());
    writeStream.flush();

kod klienta:

    ObjectInputStream clientReadStream;

    ...

    serverPackage = (ServerPackage)clientReadStream.readObject();

Przy wszystkich probach wyslania(w jednej instancji programu oczywiscie) wszystkie serverPackage sa takie same, jak pierwszy otrzymany.
Wiem, ze dostarczyłem mało informacji, ale moze ktos bedize w stane wywnioskować, gdzie jest błąd. Najprawdopodobniej nie uzylem jakiejs funkcji do czyszczenia czy cos takiego..

Dzieki za pomoc z gory

0

Obstawiam (krysztalowa kula zostala dzisiaj w pracy) ze tworzysz ServerPackage tylko raz, i tylko zmieniasz jej pola, i wysylasz za kazdym razem ta sama. Serializacja dziala tak ze wysyla za pierwszym razem obiekt, a za kolejnymi tylko jakby numer seryjny obiektu, klient za pierwszym razem odbiera obiekt, zapamietuje go, a nastepnie odbiera tylko numery seryjne i zwraca ciagle ten sam.
Aby miec inne dzialanie sluza metody reset() na Object Streamach.
I co, moge byc wrozka czy nie?

0

po stronie serwera ServerPackage jest tworzony i wysylany za kazdym razem, gdy nastapi zdarzenie zmieniajace odpowiednie pola. kod pakietu:

public class ServerPackage implements Serializable {
    public Vector <Player> players;
    public Vector <Pawn> pawns;
    public String[] buttonNames;

    public ServerPackage(){
        this.players = Game.players;
        this.pawns = Game.pawns;
        this.buttonNames = Game.buttonNames;
    }
}

wczesniej sprawdzalem, czy ten pakiet jest wysyłany z poprawnymi danymi - i oczywiscie jest, ale do klienta dochodzi tylko ten pierwszy wysłany.

Co do tworzenia ServerPackage po stronie klienta - wskaznik do obiektu jest tylko jeden i zmieniam to, co on wskazuje, za kazdym razem, gdy wysłana jest pakiet od serwera. Wiem, ze w tym co napisales jest rozwiazanie mojego problemu, ale nie moge za bardzo wyciagnac wnioskow z tej wiadomosci. Mozesz mi troche jasniej wytlumaczyc co mam zrobic?

0

Czyli tworzysz ServerPackage tylko raz i wysylasz ciagle ten sam obiekt ze zmienionymi polami, czy tworzysz nowy pakiet za kazdym razem przed wyslaniem? Pytam bo nie potrafie jednoznacznie stwierdzic z tego kodu co pokazujesz (wlasciwie nic nie pokazujesz) oraz opisu problemu, przecza sobie zgodnie z moim doswiadczeniem z serializacja.

Jesli to pierwsze to odpowiedzia na Twoj probkem bedzie:

  • tworzenie za kazdym razem nowego pakietu i wysylaniu go do klienta, lub
  • jesli chcesz ciagle uzywac ten sam obiekt i tylko zmieniac jego pola, to po kazdym wyslaniu wywolaniu metody writeObject() wywoluj rowniez metode ObjectOutputStream.reset()
    W przypadku pierwszego rozwiazania warto rowniez raz na jakis czas wywolac reset() poniewaz ObjectOutputStream zapamietuje wszystkie obiekty ktore do niego zapisales, czyli nawet jak byly to jakies stare pakiety, o ktorych chcesz zapominec, one sa tam trzymane i jest memory leak bo nie moga byc sprzatniete collectorem. Ja bym wybral opcje z wysylaniem nowiutkich pakietow za kazdym razem i wywolywaniem metody reset().

Jesli natomiast juz wysylasz ciagle nowe pakiety, nie wykorzystujesz ponownie tego jednego jedynego tworzonego na starcie, to nie potrafie pomoc bez wiekszej ilosci kodu bo to co opisujesz po prostu nie moze sie dziac. Wiec albo wkleisz tytaj tyle kodu zebysmy mogli cos z tego zobaczyc, albo bedziesz czekal na inna wrozke i w miedzyczasie stracisz wszystkie wlosy lub sam znajdziesz odpowiedz.

0

wreszcie wszystko dziala jak nalezy, uzylem reset po wyslaniu, dzieki wielkie:)

tylko dalej jednego nie rozumiem. przeciez w tym miejscu:

writeStream.writeObject(new ServerPackage());

widac, ze za kazdym razem tworze nowy pakiet i go wysylam, a ty opisales to jako jednorazowe tworzenie i wysylanie ciagle tego samego obiektu.. jak to..?

0

Szczerze? Nie mam pojecia, za malo kodu dales, a jak wspomnaiem, to co opisujesz, to ze rozwiazanie dziala i kawalki kodu ktore podales kloca sie ze soba i moimi doswiadczeniami z serializacja. No ale wazne ze dziala...

1 użytkowników online, w tym zalogowanych: 0, gości: 1