Socket Problem mit ObjectInput/OutputSream

chaostheory

Bekanntes Mitglied
Hallo,
ich versuche gerade ein 2D-Spiel von mir netzwerkfähig zu machen.
Auf dem Bildschirm befinden sich Sprites, die an die Clients versendet werden sollen. Ich nutze noch das einfache Client-Server Prinzip, bei dem der Server alles berechnet und der Computer nur als Terminal dient.
Mein Plan: Ich versende für jeden Sprite die x- und y-Koordinate, sowie einen int, der mit Hife eines Enums einem genauen Bild zugeordnet ist.
Jedoch bekomme ich die verschiedensten Exception, egal was ich probiere. Es klappte weder mit einem int-Array, noch einer Klasse, die in Variablen die Werte speicherten und sogar mit einer gänzlich leeren Klasse klappte es nicht.

Empfangen:
Java:
public void listen() {
		Object object = null;
		try {
			object = inputStream.readObject();
		} catch(SocketException e) {if(e.getLocalizedMessage().equals("Connection reset")) main.getCommunicationManager().closeConnection();}
		catch (IOException e) {e.printStackTrace();}
		catch (ClassNotFoundException e) {e.printStackTrace();}
		
		if(object != null) main.print("Objekt erhalten: " + object);
		
		if(object instanceof InputMessage) {
			switch((InputMessage) object) {
				case PLAYER_MOVE_CENTER: main.getGameManager().setPlayerDirection(1, Direction.CENTER);
				case PLAYER_MOVE_RIGHT: main.getGameManager().setPlayerDirection(1, Direction.RIGHT);
				case PLAYER_MOVE_LEFT: main.getGameManager().setPlayerDirection(1, Direction.LEFT);
				case PLAYER_SHOOT: main.getGameManager().shootArrow(1);
			}
		}else
		if(object instanceof int[][]) main.getDrawManager().setSpriteMessage((int[][]) object);
Senden:
Java:
public void sendObject(Object object) {
		main.print("Sende " + object);
		try {
			outputStream.writeObject(object);
			main.print("Übertragung erfolgreich.");
		} catch (IOException e) {e.printStackTrace();}
	}
	
	public void sendSpriteList(CopyOnWriteArrayList<Sprite> spriteList) {
		sendObject(createMessageArray(spriteList));
	}
	/* Aufbau einer Netzwerknachricht(Speichert alle Sprites ab)
	 * Der erste Index gibt den Sprite an
	 * Der zweite Index ist an Position 0 der Bildtyp, an 1 die X-Position und an 2 die Y-Posiion
	 */
	private int[][] createMessageArray(CopyOnWriteArrayList<Sprite> spriteList) {
		int[][] message = new int[spriteList.size()][3];
		for(int x = 0; x < spriteList.size(); x++) {
			Sprite sprite = spriteList.get(x);
			message[x][0] = main.getImageHandler().getImageNumberFromImage(sprite.getImage()).getNumber();
			message[x][1] = (int) Math.round(sprite.getX());
			message[x][2] = (int)  Math.round(sprite.getY());
		}
		return message;
	}
 
Moin,

Jedoch bekomme ich die verschiedensten Exception, egal was ich probiere. Es klappte weder mit einem int-Array, noch einer Klasse, die in Variablen die Werte speicherten und sogar mit einer gänzlich leeren Klasse klappte es nicht.
Vielleicht solltest Du das mal konkretisieren - das ist so keine wirkliche Fehlerbeschreibung :noe:

WELCHE Exception ???:L
Was ist 'es', dass nicht klappt ???:L

Gruß
Klaus
 
OptionalDataException, NotSerializableException und StreamCorruptedException. Bei meinem geposteten Code tritt nur erstere auf.
Mein Hauptpunkt ist aber, dass ich glaube ich das ObjectStream System nicht wirklich verstanden habe. Gibt's da so ein paar generelle Punkte zu beachten?
 
da deine "Liste" vermutlich von List<?> erbt kannst du diese auch dierekt dem Object*Stream übergeben ...
oder du änderst etwas daran was du überhaupt senden willst ...

meiner meinung nach zu kompliziert gedacht
 
Die List ist eine ArrayList<Sprite>. Das Problem ist, dass ein Sprite auch sein Bild speichert und ich ja nicht ständig die Bilder mit verschicken will.
 
dann hast du schon n fehler in der datenstruktur ... weil so hast du ewig viele daten im RAM ...
ich würds erstmal komplett umschreiben das überhaupt keine bilder in dieser liste sind ... sondern nur IDs *auf meinet wegen ne andere liste oder n array oder so* ...

wie gesagt : grund-konzeptionell alles ziemlich wage und schlecht durchdacht ...
 

Zurück
Oben