Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Banana-Coding.com - Java Knuddels Emulator. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

1

Freitag, 29. Juli 2011, 17:13

[Fix] Protocol

Mir ist damals ein kleiner Denkfehler unterlaufen, wo ich das erste Byte nicht als Integer gelesen habe, wodurch der erste Check beim Dekodieren wenig Sinn macht.

SessionHandler.java öffnen und

Quellcode

1
2
3
                    byte[] buffer = Protocol.decode(in);
                    String[] tokens = new String(buffer, "UTF8").split("\000");
                    String opcode = tokens[0];

durch

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
                    int first = in.read();

                    if (first == -1) {
                            break;
                    }

                    int len;
                    byte b = (byte) first;

                    if (b >= 0) {
                            len = b + 1;
                    } else {
                            len = (b & 0x1F) + 1;
                            int count = (b & 0x60) >>> 5;

                            for (int i = 0; i < count; i++) {
                                    len += in.read() << (i << 3) + 5;
                            }
                    }

                    byte[] buffer = new byte[len];

                    for (int i = 0; i < len; i++) {
                            buffer[i] = (byte) in.read();
                    }

                    String packet = new String(buffer, "UTF8");
                    String[] tokens = packet.split("\0");
                    String opcode = tokens[0];

ersetzen.

Anschließend könnt ihr die Methode decode() in Protocol.java löschen.
Tschüß.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Flav« (30. Juli 2011, 11:04)


2

Mittwoch, 3. August 2011, 01:15

Bei byte[] buffer = new byte[len]; bekommt man ein Negativearrayexception Fehler :o
mfG, Imagician.

3

Mittwoch, 3. August 2011, 05:26

Wann hast du den Fix implementiert? Zu Anfang war ein kleiner Fehler drin, hatte den Post wie du im Footer sehen kannst am 30. nochmal editiert.
Tschüß.

4

Sonntag, 29. April 2012, 13:48

Ich will dich jetzt nicht dissen oder so :D
Aber das war schon richtig....

in.read returned nur ein byte als Dateityp int....
Deine Veränderung des Codes macht 0 unterschied.

5

Sonntag, 29. April 2012, 20:19

Ich will dich jetzt nicht dissen oder so :D
Aber das war schon richtig....

in.read returned nur ein byte als Dateityp int....
Deine Veränderung des Codes macht 0 unterschied.

Eben nicht. Als byte gecastet ändert sich der Wert wenn er über 127 ist (128 wird dann glaub ich zu -128, 129 zu -127 usw. bis -1).

Quellcode

1
2
3
4
5
6
7
8
9
byte first = (byte) in.read();



if (first == -1) {

break;

}

wäre falsch. Ist ja schwachsinn wenn man -1 nicht als byte lesen kann. Deshalb lesen wir das erste Byte als Integer um zu prüfen, ob der Wert -1 ist (wenn du dir die Java Doc. mal anschaust, dann weißt du, dass das das Ende des Streams bedeutet; ist in .NET übrigens auch so).
Tschüß.

6

Sonntag, 29. April 2012, 20:49

Ok, stimmt das mit dem Überlauf habe ich natürlich nicht bedacht. Dann nehme ich es zurück....
Hatte jetzt nur im Sinn das binär -1(int) und -1(byte) gleich ist.