Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen

Marcel___

Neues Mitglied
Guten Tag,

ich programmiere hobbymäßig in Java und hätte da mal eine Frage. Ich bin mir recht sicher, dass die Frage für Leute, die etwas Ahnung von Informatik haben recht einfach zu beantworten ist. Wenn ich eine Textdatei mit einem FileInputStream einlese und anschließend mit einem DataOutputStream über Sockets zu einem anderen Client sende, wird die Textdatei ohne Inhalt übertragen. Bei Bilder funktioniert jedoch alles ohne Probleme, daher hoffe ich, dass mir hier jemand (grob) erklären kann, warum das so ist. Im Internet finde ich leider keine Erklärungen, die mir weiterhelfen. Vielen Dank
 
Käme auf den Zusammenhang an... Bei Spam-Emails liesse sich z.B. serverseitig kontrollieren, ob eine Email geöffnet wurde (da geringer Datenverkehr stattfand)
 
Um die Frage zu beantworten, braucht es SEHR viel mehr Information. Wie sieht der exakte Code des Senders aus? Wie sieht der exakte Code des Empfängers aus? Wie sendest du exakt das aus dem FileInputStream gelesene in einen DataOutputStream? Wie empfängst du es exakt beim Empfänger? Wie speichert der sich das evtl. in eine Datei? Wie verifizierst du den Inhalt, bzw. dass das richtige angekommen ist?
An jeder dieser Stellen kann ein Fehler sein.
 
Server:

Code:
fun receiveFile(inputstream: InputStream, path: String = "C:\\Users\\Marcel\\Desktop\\test.txt") {
        try {
            val datainput = DataInputStream(inputstream)
            val fileoutputstream = FileOutputStream(path)
            var buffer = datainput.readAllBytes()
            println("[Server] File was read in")
            fileoutputstream.write(buffer)
            fileoutputstream.flush()
            println("[Server] File was saved")

            datainput.close()

        } catch (e: IOException) {
            println("[Server] Error in input or output")
            println(e.printStackTrace())
        } catch (e: Exception) {
            println("[Server] Unknown error")
            println(e.printStackTrace())
        }
    }

Client:

Code:
fun sendFile(outputstream: OutputStream, path: String = "C:\\Users\\Marcel\\Desktop\\hallo.txt") {
        try {
            val pw = PrintWriter(outputstream)
            pw.println("123FILE123")
            pw.flush()
            val fileInputStream = FileInputStream(path)
            val buffer: ByteArray = fileInputStream.readAllBytes()
            val dataout = DataOutputStream(outputstream)
            dataout.write(buffer)
            dataout.flush()
            println("[Client] Data was sent")
            dataout.close()
            fileInputStream.close()
            pw.close()
        } catch (e: IOException) {
            println("[Client] Error in input or output")
            println(e.printStackTrace())
        } catch (e: Exception) {
            println("[Client] Unknown error")
            println(e.printStackTrace())
        }
    }

Es ist zwar in diesem Fall in Kotlin geschrieben, jedoch werden hauptsächlich Java-Klassen verwendet und ich denke, dass der Code somit verständlich sein sollte. Die Bytes, die beim Client eingelesen werden, kommen auch definitiv alle beim Server an. Bei Bildern, Musik etc. funktioniert das soweit auch. Nur bei normalen .txt Dateien speichert er die Datei ohne Inhalt
 

Zurück
Oben