Ik zit met een lastig probleem. Ik ben een spel aan het maken en moet op een gegeven moment objecten doorzenden van de server naar de clients via sockets. Het verzenden van "standaard" objecten vormen geen probleem en heel het netwerkgedeelte werkt dus.
Mijn spel heeft een spelbord die bestaat uit vakken. Elke vak wordt ingeladen @runtime op basis van een xml file die verwijst naar de juiste vakken. Dit om het spel makkelijk uitbreidbaar te maken. Bij het opbouwen van het spelbord wordt een vak zijn type ingelezen uit het xml file. bv een afgrond dan wordt dit object @runtime geload via een classloader en gecast naar een vak object.
Dit werkt perfect! Het bordt en alle nodige gegevens worden perfect opgebouwd en weer gegeven. Maar vanaf ik een spelbord wil doorzenden op het netwerk om de clients dit bord te laten ontvangen (het object bord bestaande uit de @runtime geladen vakken) loopt het mis.
Het verzenden is geen probleem maar vanaf een client het spelbord ontvangt en de "stream" wilt omzetten naar het object spelbord loopt het mis. Dan wil deze via (denk ik) een classloader de vakken weer loaden. Hier krijgt hij dan een probleem en krijg ik een ClassNotFoundException. Nu de client heeft (op de dezelfde manier als de server) de nodige class files van de vakken staan. Het probleem is dat de classloader denk ik geen idee heeft waar hij deze moet zoeken.
Ik weet totaal niet hoe ik dit probleem zou moeten oplossen en ben dus op zoek naar hulp
de serverkant, hier gaat het goed
client kant hier loopt het mis
Mijn spel heeft een spelbord die bestaat uit vakken. Elke vak wordt ingeladen @runtime op basis van een xml file die verwijst naar de juiste vakken. Dit om het spel makkelijk uitbreidbaar te maken. Bij het opbouwen van het spelbord wordt een vak zijn type ingelezen uit het xml file. bv een afgrond dan wordt dit object @runtime geload via een classloader en gecast naar een vak object.
Dit werkt perfect! Het bordt en alle nodige gegevens worden perfect opgebouwd en weer gegeven. Maar vanaf ik een spelbord wil doorzenden op het netwerk om de clients dit bord te laten ontvangen (het object bord bestaande uit de @runtime geladen vakken) loopt het mis.
Het verzenden is geen probleem maar vanaf een client het spelbord ontvangt en de "stream" wilt omzetten naar het object spelbord loopt het mis. Dan wil deze via (denk ik) een classloader de vakken weer loaden. Hier krijgt hij dan een probleem en krijg ik een ClassNotFoundException. Nu de client heeft (op de dezelfde manier als de server) de nodige class files van de vakken staan. Het probleem is dat de classloader denk ik geen idee heeft waar hij deze moet zoeken.
Ik weet totaal niet hoe ik dit probleem zou moeten oplossen en ben dus op zoek naar hulp
de serverkant, hier gaat het goed
code:
1
2
3
4
5
6
7
8
9
10
11
| /**
* Stuur een spelbord naar alle clients.
*
* @param SpelBord spelbord
*/
public void stuurSpelbord(SpelBord spelbord){
ClientServerPakket pakket = new ClientServerPakket();
pakket.setObj(spelbord);
pakket.setType(ClientServerPakket.SPELBORD);
connectie.stuurPakketNaarClient(pakket,null);
} |
client kant hier loopt het mis
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| /**
* De run() procedure bewaakt de socket voor inkomende objecten.
* Als er een object binnenkomt wordt dit verpreid over de verschillende peers.
*/
public void run(){
try{
while(true){
try{
in = new ObjectInputStream(socket.getInputStream());
//hieronder loopt het mis
pakket = (ClientServerPakket)(in.readObject());
}
catch(java.io.IOException ioe){
System.out.println("Socket problemen aan de serverzijde");
break;
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if(pakket != null){
model.verdeelOverPeers(pakket);
}
}
} |
[ Voor 29% gewijzigd door Tyf op 28-12-2005 11:25 ]