Daten Empfangen im Netzwerk



  • Und was wäre die möglichkeit das vorher herauszufinden?
    Ich lese ja die Daten direkt sobald ich die Verbindung geöffnet habe, kann ich da wärend des lesens noch was drehen?



  • Du gibst typsicherweise beim Lesen an, wieviel Platz du hast (was darüber hinausgeht, sollte im Zwischenpuffer warten, bis du weiterliest). Also entweder liest du stückchenweise, bis du eine EOT-Antwort bekommst oder du überträgst als erstes die Länge der ankommenden Nachricht (in einer konstanten Größe):

    //Pseudocode:
    //a:
    char data[100];
    while(recv(s,data,100)!=-1)
    {
      //verarbeite Block
    }
    
    //b:
    int data_len,char* data;
    recv(s,data_len,sizeof(int));
    data=malloc(data_len);
    recv(s,data,data_len);
    


  • realloc()



  • CStoll schrieb:

    recv(s,data_len,sizeof(int));
    

    Java VMs benutzen 'big endian' und ein 'int' besteht dort aus 4 bytes.
    🙂



  • Wie gesagt - Pseudocode. Du mußt natürlich selber dafür sorgen, daß du die Daten richtig erkennst 😉



  • vista schrieb:

    CStoll schrieb:

    recv(s,data_len,sizeof(int));
    

    Java VMs benutzen 'big endian' und ein 'int' besteht dort aus 4 bytes.
    🙂

    Na ich hoffe doch, dass in Java die Größe des Ints auch vom darunterliegenden Betriebssystem abhängt (so wie in C). D.h. 16Bit-System = 2 Byte, 32Bit-System = 4 Byte, 64Bit-System = 8 Byte, ...



  • AJ schrieb:

    vista schrieb:

    CStoll schrieb:

    recv(s,data_len,sizeof(int));
    

    Java VMs benutzen 'big endian' und ein 'int' besteht dort aus 4 bytes.
    🙂

    Na ich hoffe doch, dass in Java die Größe des Ints auch vom darunterliegenden Betriebssystem abhängt (so wie in C). D.h. 16Bit-System = 2 Byte, 32Bit-System = 4 Byte, 64Bit-System = 8 Byte, ...

    Nana, ganz so einfach ist es nun auch nicht 😉



  • AJ schrieb:

    Na ich hoffe doch, dass in Java die Größe des Ints auch vom darunterliegenden Betriebssystem abhängt (so wie in C). D.h. 16Bit-System = 2 Byte, 32Bit-System = 4 Byte, 64Bit-System = 8 Byte, ...

    nein, der java-user soll sich darauf verlassen können, dass variablen für immer und alle zeiten und auf allen java VMs die gleiche grösse und byte order haben.
    🙂



  • vista schrieb:

    nein, der java-user soll sich darauf verlassen können, dass variablen für immer und alle zeiten und auf allen java VMs die gleiche grösse und byte order haben.
    🙂

    Heißt das, dass Java für immer und alle Zeiten nur mit 32Bit zurecht kommt??



  • AJ schrieb:

    Heißt das, dass Java für immer und alle Zeiten nur mit 32Bit zurecht kommt??

    für grössere integers hat java 'long', der besteht aus 8 bytes.
    🙂



  • vista schrieb:

    AJ schrieb:

    Heißt das, dass Java für immer und alle Zeiten nur mit 32Bit zurecht kommt??

    für grössere integers hat java 'long', der besteht aus 8 bytes.
    🙂

    Nur dumm, wenn vielleicht doch mal noch ein Betriebssystem rauskommt, dass auf 128Bit basiert... 😉

    Na zumindest die Referenzen müssen mitwachsen mit dem darunterliegenden System.


Anmelden zum Antworten