[Socket]Nullterminatoren mitlesen?



  • Hallo

    Ich bin gerade dabei, einen Server zu schreiben. Dieser soll im Moment nur Daten vom Client empfangen. Nun sendet mein Client aber auch ab und an GEWOLLTE Null-Terminatoren (\0) die mein Server mitlesen soll.

    ServerSocket server = new ServerSocket(1234);
    Socket sock = server.accept();
    
    byte[] header = new byte[2];			
    sock.getInputStream().read(header, 0, 2);
    
    System.out.println(header[0]);
    System.out.println(header[1]);
    

    Mein Client sendet etwa sowas "\0TestString"

    Sobald ein Nullterminator auftaucht, empfängt der Server nichts mehr. Gibt es irgendeine Möglichkeit, diese Nullterminatoren mitzulesen?

    Warum ich Nullterminatoren versende?:
    Ich habe mir eine Art Header gebaut. In dem die erste 2 Byte für die Länge der Nachricht reserviert sind

    /*
     * Header aussehen:
     *  2B     
     * +---+----\\-------+
     * |   | Daten...    |
     * +---+----\\-------+
     */
    

    Und da kann es unter anderem schon einmal vorkommen, dass das erste Byte eine 0 ist. Z.B wenn die Nachrichtgröße < 255 ist.

    MFg



  • wenn du mit "Nullterminatoren" bytes meinst die den Wert 0 haben, dann: natürlich liest der stream auch 0-bytes 🙄



  • Ja dann frag ich mich, warum er es bei mir nicht machen will. Wie gesagt.. Sobald eine "0" in der gesendeen Nachricht auftaucht.. schreibt er ab da nur noch "0"en



  • versuch mal eine kleine wartezeit in den server einzubauen, denn ich vermute zu dem zeitpunkt zu dem du das ausliest sind noch nicht alle oder noch keine daten empfangen, und da java das array ja mit 0 intialisiert sieht du auch nur 0



  • player4245 schrieb:

    versuch mal eine kleine wartezeit in den server einzubauen, denn ich vermute zu dem zeitpunkt zu dem du das ausliest sind noch nicht alle oder noch keine daten empfangen, und da java das array ja mit 0 intialisiert sieht du auch nur 0

    Ich hab das noch nicht probiert ABER:

    Ich habe einmal ein Block gesendet der wie folgt aussah:

    "10Hallo\0Welt" (Die 10 ist die Länge der Nachricht)

    Was dann ankam, war nur "Hallo00000". Wie gesagt, ich will zuerst die ersten 2 byte lesen, damit ich weis, wie lang die nachricht ist. Sobald ich die Länge kenne, lese ich auch genausoviel. Deswegen diese Ausagabe. Also glaub ich nicht, dass das mit der Initialisierung von Java-Arrays im zusammenhang steht.



  • Schau mal hier.

    http://www.codeplanet.eu/tutorials/java/57-battleship.html?start=3

    Da wird auch ein Nachrichtentyp verwendet mit Längenangabe. Ganz unten auf der Seite ist der Server, der die Nachricht empfängt. 😉



  • ist der sender vllt in einer dummen sprache geschrieben, und schickt tatsächlich nur das, was vo dem \0 steht? 🙄


Anmelden zum Antworten