Java Curl删除最后5个字节,但wget工作正常

Java Curl删除最后5个字节,但wget工作正常,java,curl,kotlin,wget,Java,Curl,Kotlin,Wget,我有一个Kotlin程序,我正在使用它向远程主机提供文件。我正在尝试使用curl在远程主机上获取文件。对于纯文本文件,这个程序运行得很好,但是对于.jar文件,它总是丢失正好5个字节。另一方面,wget工作时没有任何问题,并且不会丢失5个字节 如果有用,这里是Kotlin代码 val client = serverSocket.accept() val file = File(pathToFile) val bytes =

我有一个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就可以很好地工作,但我很好奇为什么首先会出现这个问题

根据wget文档,它支持http(s)和ftp(s)协议。你正在做的既不是。它之所以能够工作,很可能是因为它们以适合您的特定方式处理不兼容的http服务器

如果你想做你正在做的事情,你至少可以在文件内容前面放一个假的HTTP响应:

out.write("HTTP/1.1 200 OK\r\nContent-type: application/octet-stream\r\n\r\n"
          .getBytes(StandardCharsets.US_ASCII));

啊,这是有道理的。我想我从来没有想过要把wget和curl看作只是读取字节流,因为这恰好是我想要从它们那里得到的。谢谢