Also, ich bin im Moment dabei, mir eine kleine Anwendung zu basteln, die das Senden von Dateien über Sockets ermöglichen soll. Das heißt direkt über eine IP Verbindung. Nach ein wenig Recherche habe ich zwar ein sehr schnelles Codebeispiel gefunden, jedoch werden die Daten nicht ganz korrekt übertragen. Das heißt die Output Datei ist am Schluss immer fehlerhaft, sobald die Dateigröße größer als der Sendebuffer ist. Ich vermute, dass entweder Bytes verschluckt werden oder dass die Reihenfolge teilweise fehlerhaft ist.
Deswegen würde ich gerne wissen, wie man eine korrekte Übertragung gewährleisten kann.
Meine Transferfunktion bis jetzt (auf nio basiert):
Deswegen würde ich gerne wissen, wie man eine korrekte Übertragung gewährleisten kann.
Meine Transferfunktion bis jetzt (auf nio basiert):
Java:
public static void transfer(FileChannel fileChannel,
SocketChannel socketChannel, long lengthInBytes,
long chunckSizeInBytes, boolean verbose, boolean fromFileToSocket)
throws IOException {
long overallBytesTransfered = 0L;
while(overallBytesTransfered < lengthInBytes) {
long bytesTransfered = 0L;
if (fromFileToSocket) {
bytesTransfered = fileChannel.transferTo(0, Math.min(
chunckSizeInBytes, lengthInBytes
- overallBytesTransfered), socketChannel);
} else {
bytesTransfered = fileChannel.transferFrom(socketChannel,
overallBytesTransfered, Math.min(chunckSizeInBytes,
lengthInBytes - overallBytesTransfered));
}
overallBytesTransfered += bytesTransfered;
}
}
Zuletzt bearbeitet: