Java Sockets, writeByte flusht ungefragt

Marius Heil

Erfahrenes Mitglied
Hallo,

bin gerade dabei einen Java Socket Server zu schreiben, der mit Flash verbinden soll.
Wenn ich das ganze über localhost teste funktioniert alles eindwandfrei. Wenn ich das aber übers Internet laufen lasse, sprich zu meiner eigenen IP verbinde bekomme ich:
Receive: Return Code: 0x00002733
Dadurch meldet mir Flash einen EOF Error, obwohl er noch einen String einlesen sollte. In Java schreibe ich die Daten mittels writeByte, writeUTF, etc...
IN Flash wird das mit den Gegenstücken ausgelesen: reatByte / readUTF, etc.

Als erstes sender der Java server einen Byte für die auszuführende Aktion, dann wird der String übermittelt. Wenn ich die Verbindung überwache sieht das so aus:
Send: Return Code: 0x00000000
00000000 02 00 09 73 64 66 73 64 66 73 64 66 ...sdfsdfsdf


Receive: Return Code: 0x00000000
00000000 FE .


Receive: Return Code: 0x00002733


Receive: Return Code: 0x00000000
00000000 00 09 73 64 66 73 64 66 73 64 66 ..sdfsdfsdf
Als erstes schickt Flash an Java was passieren soll, dann meldet sich Java mit einem Byte das die auszuführende Aktion angibt. Danach kommt der Fehler und Schlussendlich wird der String doch korrekt übermittelt.
Warum schickt Java die Aktion zuerst los, produziert einen Error und dann erst den String?
Kann ich Java dazu überreden, dass das ganze erst nach flush() abgeschickt wird?
Läuft alles über DataInput/OutputStream.

Gruß,
Marius
 
Hallo,

bin gerade dabei einen Java Socket Server zu schreiben, der mit Flash verbinden soll.
Wenn ich das ganze über localhost teste funktioniert alles eindwandfrei. Wenn ich das aber übers Internet laufen lasse, sprich zu meiner eigenen IP verbinde bekomme ich:
Receive: Return Code: 0x00002733
Dadurch meldet mir Flash einen EOF Error, obwohl er noch einen String einlesen sollte. In Java schreibe ich die Daten mittels writeByte, writeUTF, etc...
IN Flash wird das mit den Gegenstücken ausgelesen: reatByte / readUTF, etc.

Als erstes sender der Java server einen Byte für die auszuführende Aktion, dann wird der String übermittelt. Wenn ich die Verbindung überwache sieht das so aus:

Als erstes schickt Flash an Java was passieren soll, dann meldet sich Java mit einem Byte das die auszuführende Aktion angibt. Danach kommt der Fehler und Schlussendlich wird der String doch korrekt übermittelt.
Warum schickt Java die Aktion zuerst los, produziert einen Error und dann erst den String?
Kann ich Java dazu überreden, dass das ganze erst nach flush() abgeschickt wird?
Läuft alles über DataInput/OutputStream.

Gruß,
Marius

Ohne genau zu wissen was Data(Input|Output)Stream intern so alles macht. Schreibt doch einfach deinen "Befehl" in einen ByteArray(Input|Output)Stream und den dann als ganzes an deinen (Input|Output)Stream.
 
Du könntest eine Klasse (von FilterOutputStream abgeleitet) schreiben, die bei den write-Befehlen (sind da nur 3) die Daten buffert und erst beim Aufruf von flush weitergibt. Diese Klasse könntest Du dann einfach zwischen OutputStream und DataOutputStream schalten und bräuchtest sonst nichts zu verändern.

Der Aufruf von flush ist dann aber verpflichtend!
 
Das wäre eine Möglichkeit, wahrscheinlich würde ich es dann wirklich in ein ByteArray schreiben und dann losschicken, ich brauche nämlich die ganzen Methoden wie writeUTF, etc.
Was mich halt ein wenig wunder ist, dass ich EOF Exceptions bekomme, teils auch auf der Seite von Java.
Wenn ich das richtig verstehe sollten die read Methoden eigentlich blocken. Und die Daten kommen ja schließlich auch an. Wenn ich das ganze im Debugger laufen lasse spuckt er mir sofort Fehlermeldungen aus, der scheint also nicht wirklich auf die kompletten Daten zu warten. Das könnte mir dann selbst Probleme bereiten wenn ich es in einem flushe.
 

Neue Beiträge

Zurück