Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

01.07.2011, 18:16

BufferedOutputStream flush() Probleme

Hallo Leute,

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
public void login1(int i)
    {
        try {
            byte[] b = crypt(byte_login1_de[i], xor+1);
            xor+=b.length-1;
            System.out.println(i);
            output.write(b);
            ((BufferedOutputStream)output).flush();                 
        } catch (IOException ex) {
            System.out.println("Error"+ ex.toString());
        } 
    }


Ich rufe diese Methode 6 mal hintereinander auf, das erste Packet wird wie gewollt einzelnt verschickt, die restlichen 5 werden aber als 1 Packet versendet, also 5 mal hintereinander gepackt und verschickt.

Output ist von der Klasse BufferdOutputStream, da da die flush() Methode ja implementiert sein soll, aber wieso funktioniert das nicht ?

lg

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

01.07.2011, 18:30

Ich vermute mal du hast eine TCP Verbindung und dieser BufferedOutputStream schreibt auf diese. Ich vermute weiter dass du mit dem flush() bestimmen willst was bei der wievielten read() Operation auf der anderen Seite rauskommt!? Das probieren am Anfang viele aber das funktioniert so nicht. TCP ist ein streamorientiertes Protokoll, d.h. wenn du TCP verwendest gibt es sowas wie Pakete garnicht. Der BufferedOutputStream kann flushen wie er will, er wird dabei wohl nur in den Output-Buffer der TCP Verbindung flushen. Und was wann wie verschickt wird, darum kümmert sich TCP. Wenn du Nachrichten über TCP schicken willst muss du dir selber was einfallen lassen wie du die voneinander abtrennst. Möglichkeiten wären z.B. Trennzeichen oder einfach vor jeder Nachricht die Länge der selben schicken.

Btw: Beim nächsten Mal wärs hilfreich auch hinzuschreiben welche Sprache/Framework du eigentlich verwendest und was genau du da eigentlich tust ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (01.07.2011, 18:35)


3

01.07.2011, 18:45

Also, ich nutze Java und ja, ich nutze eine TCP Verbindung. Das Problem ist dass ich nicht entscheiden kann was der Server macht, da ich keinen Zugriff auf diesen habe. Ich versuche einen Clienten zu simulieren, der mit dem Server kommuniziert. Wenn ich die Packete (oder Streams =/, ich sag ma weiterhin Packet ^^) mit einem Sniffingtool vom "richtigen" Clienten abfange, sehe ich 6 einzelne "Päckchen", wenn ich die Packete von meinem Programm sniffe, dann seh ich ein einzelnes Packet und ein "Großes", welches aus, aneinandergereiht, aus den letzten 5 Packeten besteht.

Da fällt mir gerade keine Lösung ein :<

lg

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

01.07.2011, 18:58

Das Problem ist dass dir nicht klar ist dass es hier kein Problem und daher auch keine Lösung gibt ;). Ob 6 einzelne TCP-Pakete mit jeweils 1 Byte Inhalt oder 1 TCP-Paket mit 4 und 1 TCP-Paket mit 2 Byte Inhalt oder 1 großes TCP-Paket mit 6 Byte Inhalt verschickt werden macht keinen Unterschied. In jedem Fall kommen auf der anderen Seite 6 Byte in der richtigen Reihenfolge (nämlich der in der sie verschickt wurden) an. Und das ist auch schon wieder alles was TCP tut.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »dot« (01.07.2011, 19:07)


5

01.07.2011, 19:18

Oh ok danke. :D

Das hab ich gerade gemerkt, aber irgendwie nicht geglaubt/verstanden ^^

Dann hab ich doch nichts falsch =)

lg

Werbeanzeige