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

Mittwoch, 4. Dezember 2013, 13:15

[Selfwritten Client] Pakete kommen falsch an

Irgendwie stehe ich grad auf dem Schlauch.

Ich habe angefangen einen eigenen Clienten zu schreiben, nur irgendwie kriege ich das Handshaking nicht hin, da der Server das Paket komischerweise anders "intepretiert".

Ich verwende die Modifizierte Banana-Version von Bizzi.

Server-Log:

Zitat


Loading butler
Loading channel styles
Loading channels
Loading smileys
Starting FlashPolicyServer
Listening on port 2710 (Websocket: 2711)
p
Unhandled opcode: 'p'


Client-Log:

Zitat


init
\0
t\0V9.0bad\0http://localhost/index.php?page=chat&v=90bad2&c=0\08\01.7.0_04\0-\053741\0Java HotSpot(TM) Client VM\0-


Wie man der Log entnehmen kann, wird zwar das Handshake-Paket "t" gesendet, der Server empfängt das ganze aber irgendwie als "p".
Hab erst gedacht, dass es vllt. ein Charset-Problem sein könnte, aber im Gegenteil. Beide Applikationen laufen unter UTF-8. Ein forcen auf UTF-8 funktioniert hier auch keines weges (beispielsweise über new String(..., "UTF-8"); bzw. getBytes("UTF-8");)

Hat vielleicht jemand eine Idee? Source des Clienten ist angehangen.

Edit:
Ich habe nun mal im PacketBuilder den Cast von writeByte von char auf byte gesetzt, und bekomme Serverseitig nun folgende Log:

Zitat

Loading butler
Loading channel styles
Loading channels
Loading smileys
Starting FlashPolicyServer
Listening on port 2710 (Websocket: 2711)
New Client
New Client
[IN] pt0V9.0bad0http://localhost/index.php?page=
Unhandled opcode: 'pt0V9.0bad0http://localhost/index.php?page='


Das lässt darauf schließen, dass es wohl am Initalisieren der Connection liegt. Es wird ja normalerweise erst 0x00 Byte gesendet, um in den Client-Mechanismus zu gelangen, 0x02 wäre ja beispielsweise die die Registration.
Und ich glaub ich weiß nun auch, wie ich das ganze Löse. Ich gehe einfach hin und entferne getConnectionType() und setze einfach dies zuvor bei getHandShake() vorran. Mal testen...

Edit 2:
Selbst dies löst das Problem nicht.
Ich bekomme zwar nun die Channnel-List zurückgeworfen, da stimmt aber dennoch was nicht:

Zitat


Loading butler
Loading channel styles
Loading channels
Loading smileys
Starting FlashPolicyServer
Listening on port 2710 (Websocket: 2711)
New Client
New Client
[IN] q
[IN] t
5 Banana
( xyz Lobby
b Lobby
1 p B - Mafia
1 p B -
[IN] V
Unhandled opcode: 'V'
[IN] .0bad

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Jail O« (5. Dezember 2013, 14:37) aus folgendem Grund: Anhang gelöscht, da nur gedownloaded wird, aber es niemand für Nötig hält zu helfen.


2

Donnerstag, 5. Dezember 2013, 13:58

War ja irgendwie klar, dass niemand dazu beitragen kann.
Hauptsache alles das downloaden und in die Finger bekommen, was nur geht.

3

Donnerstag, 5. Dezember 2013, 16:17

Ich nutze den Banana-htmlchat von github und dort Funktioniert alles

4

Donnerstag, 5. Dezember 2013, 16:23

Auch den von Bizzi?
Ich hab halt irgendwie Probleme Pakete zu dem zu senden, die kommen da irgendwie falsch an.

Edit:
Das verwundert mich halt, da ich die Protocol-Klasse sowie den PacketBuilder verwende und des direkt vom Server stammt. Huffman ist bei beiden Seiten disabled, des wollte ich später ggf. machen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Jail O« (5. Dezember 2013, 17:31)


5

Freitag, 6. Dezember 2013, 01:50

Ja der von Bizzi

Was mir auf fällt in dein Posting haste in den Simple.html und knuddels.html ?

wenn die version das ist die du nutzt solltes du die passende Server adresse eingeben

:) dann müssten sie gehen und die ports in der Firewall freigeben 2710 2711 oder die du nutzt

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »misterx« (6. Dezember 2013, 02:01)


6

Freitag, 6. Dezember 2013, 04:04

Ich glaube du bist am ganz anderen Ende.

Ich rede von einem Selbstgeschriebenen Java Clienten, nicht etwa den HTML-Clienten.

7

Freitag, 6. Dezember 2013, 17:38

Hallo,

du musst das null byte (0x00) am anfang direkt in den outputstream senden

this.socket.getOutputStream().write(0x00);

mfg :D

8

Freitag, 6. Dezember 2013, 17:43

Werde ich morgen mal probieren, danke für den Tipp. Hab mein laptop beim Kollegen gelassen und hab die Source derzeit nur dort drauf ^^

Die Frage ist aber, was denn daran falsch ist, wenn:

a.)
... out.write(new byte[] { 0x00 });
bzw.
... out.write(0x00);
b.)
... Des über den ohnehin servserseitig genutzten PacketWriter zusammengestellt wird
c.)
... Des direkt am Handshake-Paket vorran gestellt wird (also \0t\0,..).

Im Falle von Option C sollte das doch gehen, da ja ohnehin nur das erste byte gereaded wird und dann in den Mechanismus kommt, wo der rest gelesen wird?

9

Freitag, 6. Dezember 2013, 18:01

OK, ich habs nun gecheckt. Bin wohl etwas zuviele Zeilen momentan am schreiben, und dann 1.000 verschiedene Projekte :D

Also nochmal.
Es ist schon richtig das NULL-Byte als erstes gewrited wird, um in den Mechanismus zu gelangen. Theoretisch "könnte" der auch direkt am Handshake-Paket vorangestellt sein - Aber jetzt kommt das "aber":
Nach den NULL-Bytes wird encoded/decoded.

Das Problem was ich also hab/hatte ist, dass auch diese NULL-Byte encoded wird, was der Server natürlich falsch intepretiert, da er den ersten Byte-Read eben unbehandelt checkt.

Es gibt also 2 Optionen:
A.) Wo der Typ gecheckt wird (type == 0x00) entweder zusätzlich noch decoden (also type == 0x00 || Protocol.decode(type) == 0x00)
B.) Einfach die Send-Methode erweitern:

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
11
public void send(String packet, boolean encode) {
if(encode) {
out.send(Protocol.encode(packet));
} else {
out.send(packet);
}
}

//....
send(0x00, false);
send(/*Handshake*/, true);

10

Freitag, 6. Dezember 2013, 18:05

Im code von dir den du oben verlinkt hast schickst du das null byte über die send Funktion ab
dort wird es aber über die Protocol Funktion codiert und dann gesendet.

zu a: müsste beides funktionieren
zu b: PacketWriter? das null byte wird direkt aus dem stream gelesen
und c: funktioniert so nicht, da \0 = "" 0x00 = 0

Ähnliche Themen