如何使用套接字通道通过网络发送图像文件

时间:2009-07-01 10:02:27

标签: java sockets channel

我创建了服务器程序,它将图像文件发送到客户端。 如果图像是512字节,我的程序工作正常。但它确实适用于大型文件。

在这种情况下,我没有得到我应该得到的确切图像。意味着我恢复的图像是以一些不正当的方式。那么如何解决这个问题

我在服务器中使用java套接字通道和java nio,而在客户端使用简单套接字。

由于 苏尼

2 个答案:

答案 0 :(得分:1)

这是你的错误:

while(fileChannel.read(buffer)>0)

read()方法不一定会填充缓冲区;它将读取任意数量的字节并返回该数字。您必须允许它读取的内容小于缓冲区的容量并且只写入那么多字节,这也是必要的,因为文件大小不一定是缓冲区大小的倍数,并且最后一次读取几乎不会完全填充缓冲区

在客户端也是如此 - available()在这里没用,你必须简单地阅读然后处理你得到的许多字节。

答案 1 :(得分:0)

我没有看到你在客户端刷新和关闭输出流。当您突破时,您应该关闭()输出流,并且任何缓存的数据都将被写入文件。