Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Lanwicki 26. 11. 2018, 13:43:20
-
Ahoj,
je nějakým způsobem možné poslat přes Sockety a protokolem TCP objekt, který obsahuje vnořený objekt a ten vnořený objekt obsahuje List<>list ?
Př: posílám objekt Message a do konstruktoru - new Message(protocol, new Room(id, new Client()); s tím, že Room obsahuje uvnitř List<Client>. Jde mi to poslat ze serveru, ale na straně klienta mi to píše, že když dám message.getRoom() - tak mi háže ten to getRoom() null, jinak ten protokol se pošle v pořádku... Jde to vůbec, nebo to musím posílat po menším kusech?
Díky moc
-
Ukaz kod
-
Server side:
private void getAllRooms(int id){
for(Room room : rooms){
for(Client client : room.getClientList()){
if(client.getId() == id){
try {
System.out.println("SENDIMG ROOM S Id" + room + " LIST " + room.getClientList());
out.writeObject(new Message(4, room));
} catch (IOException e){
}
}
}
}
}
CLIENT side:
Thread readMessages = new Thread(() -> {
Message ms;
try {
while (true) {
ms = (Message) in.readObject();
if(ms.getProtocol() == 25){
onlineFriends.add(new Client(ms.getId(), ms.getName()));
} else if(ms.getProtocol() == 4){
System.out.println("READ PROTOCOL 4 " + ms);
Room room = ms.getRoom();
System.out.println("ROOM V READ MESSAGE " + room);
rooms.add(room); // throws nullPointerException
}
else {
receivedMessages.add(ms);
}
}
} catch (IOException e){
System.out.println("EXCEPTION IN READ THREAD");
System.out.println(e.getStackTrace());
} catch (ClassNotFoundException en){
System.out.println(en.getStackTrace());
}
});
-
do output streamu posilas jen Message object:
out.writeObject(new Message(4, room));
na prijimaci strane chces nacitat Message i Room, ale nevidim, ze bys nekde mel kod na WriteObject(new Room(25, room)) ?!!?
nezapomel jsi posilat Room do outputu?
-
do output streamu posilas jen Message object:
out.writeObject(new Message(4, room));
na prijimaci strane chces nacitat Message i Room, ale nevidim, ze bys nekde mel kod na WriteObject(new Room(25, room)) ?!!?
nezapomel jsi posilat Room do outputu?
no, ten Room je součástí Message, takže jsem myslel, že se to odešle jako součástí Message ten objekt...
Mám writeObject(25, room) a ten room se bere z toho for cyklu... a měl by obsahovat i list klientů...
Nebo to takto nefunguje a musím to poslat zvlášt?
-
není jednodušší posílat JSON?
-
rooms.add(room); // throws nullPointerException
Jestli to haze NPE tady tak je problem v inicializaci rooms a ne v socketech.
-
Z toho kodu neni videt co jsou ty streamy (promenne in a out) vlastne zac. Predpokladam, ze jde o pokus pouzit klasickou javovou serializaci - na tu je pomerne pekny popis napr. na baeldung: https://www.baeldung.com/java-serialization Tuhle cestu rozhodne nedoporucuji - je to velke a pomale. Jak uz tady nekdo psal, udelej si serializaci napr. pres json/http (doporucuju jackson: https://github.com/FasterXML/jackson ) nebo muj oblibeny protobuf (https://developers.google.com/protocol-buffers/docs/javatutorial). Je to vice prace, ale rozhodne se vyplati.
-
To je fuck jestli zkousel zakladni posilani objektu a nezabyval se setializaci, pro ucebni ucely ok, ale ma chybu ze neco nezapisuje achce to cist, nebo naopak.
na kazde write musi byt jedno read.
-
To je fuck jestli zkousel zakladni posilani objektu a nezabyval se setializaci, pro ucebni ucely ok, ale ma chybu ze neco nezapisuje achce to cist, nebo naopak.
na kazde write musi byt jedno read.
Pise ze ten protokol z message precte. Takze message spravne prijme. Podle me je v Message i ta Room, a problem neni v tom prenosu. Problem je podle az v tom zpracovani kde se snazi pridat tu ziskanou room do neinicializovaneho listu.
-
Ahoj,
je nějakým způsobem možné poslat přes Sockety a protokolem TCP objekt, který obsahuje vnořený objekt a ten vnořený objekt obsahuje List<>list ?
Př: posílám objekt Message a do konstruktoru - new Message(protocol, new Room(id, new Client()); s tím, že Room obsahuje uvnitř List<Client>. Jde mi to poslat ze serveru, ale na straně klienta mi to píše, že když dám message.getRoom() - tak mi háže ten to getRoom() null, jinak ten protokol se pošle v pořádku... Jde to vůbec, nebo to musím posílat po menším kusech?
Díky moc
Zkus se podivat na toto http://avro.apache.org/docs/current/
-
Tak on tak tam ma message ms=in.read a pak zkousi ms.getroom, ale to by mel spise delat room = in.read, nacist room z proudu.
-
Tak on tak tam ma message ms=in.read a pak zkousi ms.getroom, ale to by mel spise delat room = in.read, nacist room z proudu.
Prosím tě, běž si lehnout.