免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1266 | 回复: 0
打印 上一主题 下一主题

[FastDFS] 文件下载错误 [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 10:16:532015年亚洲杯之伊拉克
日期:2015-03-09 13:57:11
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-12 10:58 |只看该作者 |倒序浏览
本帖最后由 FILERF 于 2014-12-13 11:36 编辑

下载一个大容量文件,1.3G左右。下载20多分钟后就停止了,java客户端没有报错,查看storage.log发现如下问题:

[2014-12-12 10:30:10] ERROR - file: storage_nio.c, line: 404, client ip: 192.168.25.150, recv failed, errno: 32, error info: Broken pipe

下载代码:        public int download_file_mydown(String group_name, String remote_filename,
                        OutputStream out) throws IOException, MyException
                {
                final long file_offset = 0;
                final long download_bytes = 0;
                boolean bNewConnection = this.newReadableStorageConnection(group_name, remote_filename);
                Socket storageSocket = this.storageServer.getSocket();
                try
                {
                        ProtoCommon.RecvHeaderInfo header;
                        try
                        {
                                this.errno = 0;
                                this.send_download_package(group_name, remote_filename, file_offset, download_bytes);
                               
                                InputStream in = storageSocket.getInputStream();
                                header = ProtoCommon.recvHeader(in, ProtoCommon.STORAGE_PROTO_CMD_RESP, -1);
                                this.errno = header.errno;
                                if (header.errno != 0)
                                {
                                        return header.errno;
                                }                               
                                byte[] buff = new byte[256 * 1024];
                                long remainBytes = header.body_len;
                                int bytes;
                               
                                //System.out.println("expect_body_len=" + header.body_len);
                                while (remainBytes > 0)
                                {
                                        if ((bytes=in.read(buff, 0, remainBytes > buff.length ? buff.length : (int)remainBytes)) < 0)
                                        {
                                                throw new IOException("recv package size " + (header.body_len - remainBytes) + " != " + header.body_len);
                                        }
                                       
                                        out.write(buff, 0, bytes);
                                        remainBytes -= bytes;
                                       
                                        //System.out.println("totalBytes=" + (header.body_len - remainBytes));
                                }
                                return 0;
                        }
                        catch(IOException ex)
                        {
                                if (this.errno == 0)
                                {
                                        this.errno = ProtoCommon.ERR_NO_EIO;
                                }
                               
                                throw ex;
                        }
                }
                catch(IOException ex)
                {
                        if (!bNewConnection)
                        {
                                try
                                {
                                        System.out.println("关闭1");
                                        this.storageServer.close();
                                }
                                catch(IOException ex1)
                                {
                                        ex1.printStackTrace();
                                }
                                finally
                                {
                                        this.storageServer = null;
                                }
                        }
                       
                        throw ex;
                }
                finally
                {
                        if (bNewConnection)
                        {
                                try
                                {
                                        System.out.println("关闭2");
                                        this.storageServer.close();
                                }
                                catch(IOException ex1)
                                {
                                        ex1.printStackTrace();
                                }
                                finally
                                {
                                        this.storageServer = null;
                                }
                        }
                }
        }

下载的过程中没有做别的操作

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP