Hiho, ich sitze hier an einem Projekt (ein Spiel natürlich), an dessen Netzwerkteil sich jemand zu schaffen gemacht hat und ich darf es nun richten
Da der Netzwerkcode im ganzen Projekt mit drin Steckt kann ich ihn nicht ohne weiteres Posten, versuche aber die wichtigen Stellen zu beschreiben bzw. zu kopieren, und sollte es notwendig sein, setzte ich ein kleines Testprojekt auf, aber vllt. geht es ja auch so.
Im Multiplayerteil startet der Host einen Server und connectet selbst darauf, danach alle anderen Clienten.
Beim Clienten wird ein normaler Socket verwendet, auf welchen in jeweils einem eigenen Thread geschrieben wird (also auf den durch mSocket.getOutputStream() gegebenen OutputStream), bzw. von welchem gelesen wird (von seinem InputStream).
Auf der Serverseite verwenden wir für jeden Clienten einen eigenen SocketChannel. Zum lesen erzeugen wir einen neuen ByteBuffer und schreiben alle erhaltetenen Daten darauf, danach lesen wir von dem ByteBuffer die Daten in ein Paket. Das schreiben auf dem Channel läuft ähnlich ab: Paket -> ByteBuffer -> Channel.
Im Grunde funktioniert das ganze auch ein wenig, Verbindung herstellen und Daten hin- und herschicken funktioniert auch soweit. Aber: Sendet der Client Daten los, im Test 3 Integer, kommen diese "verdreht" an. Also:
Der Client sendet folgende 12 Bytes, jeweils getrennt durch ein "|":
|
Quellcode
|
1
|
0|0|0|10|0|0|0|-102|0|0|0|-91
|
Auf dem Server kommt aber folgendes an:
|
Quellcode
|
1
|
10|0|0|0|-102|0|0|0|-91|0|0|0
|
Irgendwie erinnert mich die Geschichte ein wenig an das Endian-"Problem", zum Beispiel bei C++, aber das entfällt hier ja.
Irgendwelche einstellungen wurden nicht vorgenommen. Haben wir eine übersehen? Oder wie kommt sonst dieses Verdrehen von 4-Byte-Blöcken zustande?
mfg