Curl 丢弃最后 5 个字节,但 wget 工作正常

我有一个 Kotlin 程序,我用它向远程主机提供文件。我正在尝试使用 curl 在远程主机上获取文件。对于纯文本文件,该程序对我来说效果很好,但对于 .jar 文件,它总是恰好丢失 5 个字节。另一方面,wget 可以正常工作并且不会丢失 5 个字节。


如果有用,这里是 Kotlin 代码


            val client = serverSocket.accept()

            val file = File(pathToFile)

            val bytes = ByteArray(16 * 1024)

            val instream = FileInputStream(file)

            val out = BufferedOutputStream(client.getOutputStream())


            var count: Int

            var sm = 0

            count = instream.read(bytes)


            while (count > 0) {

                sm += count

                out.write(bytes, 0, count)

                count = instream.read(bytes)

            }

            print("total bytes : $sm")

            out.flush()

            out.close()

这是我正在使用的 curl 命令和 wget 命令:


wget -O file.jar 1.2.3.4:5678


curl 1.2.3.4:5678 -o file.jar


真实且可能相关的事情:


主机(运行上面的 kotlin 代码)是一台 windows 机器,而接收者运行的是 linux。


jar 文件是在主机上创建的。


通过 scp 发送 jar 文件也可以正常工作并生成未损坏的文件。


无论使用 curl 还是 wget,kotlin 代码打印出来的总字节数都是正确的。


这种行为是 100% 可重复的:它总是正好缺少 5 个字节,仅适用于 jar 文件,无论我在多台接收机器上尝试过它。


显然这不是一个大问题,因为仅使用 wget 就可以正常工作,但我很好奇为什么首先会出现这个问题。


阿晨1998
浏览 148回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java