使用Java套接字和DataStream进行文件传输的问题

时间:2015-06-23 05:31:45

标签: java sockets

我一直在为自己和一些朋友开发聊天客户端,并决定尝试添加功能以允许客户端之间的文件传输。我能够发送一个文件,但它的状态与发送的文件不同。例如,这是一个比较发送图像之前和之后的链接:

http://i.imgur.com/qbMo0gy.png

不要问我为什么使用那张照片,它只是我在照片文件夹中找到的第一张照片...... 以下是发送和接收方法:

groupBy

如果您对问题有什么想法,我很乐意听到。如果您需要更多帮助,我也可以尝试为整个项目设置一个Git。感谢任何帮助,我还在开始学习java。

3 个答案:

答案 0 :(得分:1)

看起来你错过了发送文件的尾端。在第12行的while循环中,当您发送文件的最后一部分时,它将小于8192字节,除非该文件是8192字节长的直接倍数。您将需要添加一些代码来处理此围栅问题。当您读入final(file.length()%8192)字节时,count不等于8192,因此while循环不会执行。这意味着数据永远不会写入缓冲区。

我认为如果您对这两张图片进行了比较,则收到的图片会丢失最后一个(file.length()%8192)字节。

答案 1 :(得分:1)

阅读文件的典型习惯是:

byte[] fileBuffer = new byte[8192]; while ((count = fileStream.read(fileBuffer)) > 0) { // Do something with count bytes from the fileBuffer }

如果文件的字节数较少,则会给出该字节数,并在EOF返回-1。

答案 2 :(得分:1)

问题是你没有阅读和发送文件的最后一部分,因为你的while循环条件:

enter image description here

此条件不允许从源文件中读取最后一部分并发送。将== 8192部分更改为> 0以让最后一部分发送。

此外,您应该使用dlFile方法更改此条件。

祝你好运。