witam, robię mały projekcik, w którym znaczną rolę miałoby zajmować przesyłanie plików pomiędzy serwerem napisanym w c++ a klientem w javie. Mój problem polega na tym, że często(czasem jednak plik dochodzi w calości) zdarza się, że plik nie kończy się przesyłać(serwer przesyła wszystkie pakiety - klient zatrzymuje się przy odbieraniu ostatniego z nich). Siedzę nad tym już od dłuższego czasu, jeśli ktoś wskaże błąd jaki popełniam, będę bardzo wdzięczny. W razie gdybyście potrzebowali więcej info, piszta ;)
Kod metody odbierającej plik(java):

 void recvFile() throws FileNotFoundException, IOException, InterruptedException {
        File random = new File("rand.wav");
        System.out.println("plik zostanie zapisany jako " + random.getName());
        int size;
        byte[] bufor = new byte[1024];

        out.print("FileRequest");
        out.flush();
        size = inStream.read(bufor); System.out.println("rozmiarr przed obrobka:"+size);
        size = bytesToInt(bufor);
        System.out.println("rozmiar po obrobce :" + size);



        byte[] mybytearray = new byte[size];

        FileOutputStream fileOutputStream = new FileOutputStream(random);
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);

        int bytesRead;
        int currentSize = 0;
        do {
            bytesRead = inStream.read(mybytearray, currentSize, mybytearray.length - currentSize);

            if (bytesRead >= 0) {
                currentSize += bytesRead;
                System.out.println("sciagnieto: " + currentSize + " z " + size );
                System.out.println("odczytano w jednym pakiecie: " + bytesRead);
            }
        } while (currentSize < size );
        System.out.println("wyszedlem z petli");
        bufferedOutputStream.write(mybytearray, 0, currentSize);
        bufferedOutputStream.flush();
        bufferedOutputStream.close();
    }

Kod funkcji wysyłającej plik(C++):

void wyslijPlik(int gn) {
    printf("zaczynam wysylac\n");
    char sciezka[512]="rand.wav";
    long dl_pliku, wyslano, wyslano_razem, przeczytano;
    struct stat fileinfo;
    FILE* plik;
    unsigned char bufor[1024];



    printf("Potomny: klient chce plik %s\n", sciezka);

    if (stat(sciezka, &fileinfo) < 0) {
        printf("Potomny: nie moge pobrac informacji o pliku\n");
        return;
    }

    if (fileinfo.st_size == 0) {
        printf("Potomny: rozmiar pliku 0\n");
        return;
    }

    printf("Potomny: dlugosc pliku: %d\n", fileinfo.st_size);

    dl_pliku = htonl((long) fileinfo.st_size);

    if (send(gn, &dl_pliku, sizeof (long), 0) != sizeof (long)) {
        printf("Potomny: blad przy wysylaniu wielkosci pliku\n");
        return;
    }

    dl_pliku = fileinfo.st_size;
    wyslano_razem = 0;
    plik = fopen(sciezka, "rb");
    if (plik == NULL) {
        printf("Potomny: blad przy otwarciu pliku\n");
        return;
    }

    while (wyslano_razem < dl_pliku) {
        przeczytano = fread(bufor, 1, 1024, plik);
        wyslano = send(gn, bufor, przeczytano, 0);
        if (przeczytano != wyslano)
            break;
        wyslano_razem += wyslano;
        printf("Potomny: wyslano razem %d bajtow\n, w jednym pakiecie %d", wyslano_razem, wyslano);
    }

    if (wyslano_razem == dl_pliku)
        printf("Potomny: plik wyslany poprawnie\n");
    else
        printf("Potomny: blad przy wysylaniu pliku\n");
    fclose(plik);
    return;
}