c# FTP下载大文件 socket.receive卡死 如何解决

问题描述

大概的代码如下:this.sendCommand("RETR"+strRemoteFileName);if(this.mIntReplyCode!=150&&this.mIntReplyCode!=125&&this.mIntReplyCode!=226&&this.mIntReplyCode!=250){fileStream2.Close();thrownewIOException(this.mStrReply.Substring(4));}while(true){try{intnum2=socket2.Receive(this.mBuffer,this.mBuffer.Length,SocketFlags.None);if(num2+completeFileSize>=downFileSize){num2=(int)(downFileSize-completeFileSize);}completeFileSize+=num2;fileStream2.Write(this.mBuffer,0,num2);fileStream2.Flush();if(completeFileSize==downFileSize){break;}}catch(Exceptione){thrownewIOException(e.Message);}}

有时候下载大文件时会卡死在intnum2=socket2.Receive(this.mBuffer,this.mBuffer.Length,SocketFlags.None);小文件没有问题,是什么原因造成的?

解决方案

解决方案二:
this.sendCommand("RETR"+strRemoteFileName);if(this.mIntReplyCode!=150&&this.mIntReplyCode!=125&&this.mIntReplyCode!=226&&this.mIntReplyCode!=250){fileStream2.Close();thrownewIOException(this.mStrReply.Substring(4));}while(true){try{intnum2=socket2.Receive(this.mBuffer,this.mBuffer.Length,SocketFlags.None);if(num2+completeFileSize>=downFileSize){num2=(int)(downFileSize-completeFileSize);}completeFileSize+=num2;fileStream2.Write(this.mBuffer,0,num2);fileStream2.Flush();System.Threading.Thread.CurrentThread.Join(20);if(completeFileSize==downFileSize){break;}}catch(Exceptione){thrownewIOException(e.Message);}}

试试
解决方案三:
加个System.Threading.Thread.CurrentThread.Join(20);这个吗?
解决方案四:
简单处理的话,加Task.Run(()=>{socket.Recevice(....);});复杂的话用Socket.ReceiveAsync

时间: 2024-08-07 20:02:12

c# FTP下载大文件 socket.receive卡死 如何解决的相关文章

Java实现FTP批量大文件上传下载篇1_java

本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量.大文件的上传下载控件.文章在比较了一系列FTP客户库的基础上,就其中一个比较通用且功能较强的j-ftp类库,对一些比较常见的功能如进度条.断点续传.内外网的映射.在Applet中回调JavaScript函数等问题进行详细的阐述及代码实现,希望通过此文起到一个抛砖引玉的作用. 一.引子 笔者在实施一个项目过程中出现了一种基于Web的文件上传下载需求.在全省(或全国)各地的用

java 通过apache ftp读取大文件或者下载大文件

问题描述 java 通过apache ftp读取大文件或者下载大文件 本人技术短,参照网上各位大侠的帖子写了登录ftp去读取ftp下面文件然后直接存进数据库的代码 ,但是我的代码只能读取一些小的文件,文件大点就报内存溢出.谁可以给个能在ftp上面下载大文件或者能够直接读取ftp服务器上面的大文件然后直接解析存进数据库的代码例子.不胜感激. 解决方案 内存溢出..说明内存方步下文件..ftp取到liu后写入文件吧...ps都内存溢出了..你不可能在内存中解析的..有可能是你jvm内存设置太小所致.

文件传输-使用edtftp.jar在做ftp下载小文件是可以的,下载大小为G的文件老是报错

问题描述 使用edtftp.jar在做ftp下载小文件是可以的,下载大小为G的文件老是报错 远程主机是台HP-UX的机器,使用edtftp.jar在做ftp下载小文件是可以的,下载大小为G的文件老是报错,但也有些上G的文件是下载成功的,不知是为什么?麻烦各位牛人不吝赐教!先在此感谢各位了!com.enterprisedt.net.ftp.ControlChannelIOException: Control channel unexpectedly closed ('' read so far)

java下载zip文件socket write error

问题描述 java下载zip文件socket write error 今天用java下载zip文件的时候老是出现如下错误,从网上找了错误原因,感觉答案解决不了我的问题: ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffe

ASP.Net下载大文件的实现方法

这篇文章主要介绍了ASP.Net下载大文件的实现方法,较为详细的分析了实现大文件下载的思路及具体注意事项,需要的朋友可以参考下 本文实例讲述了ASP.Net下载大文件的实现方法.分享给大家供大家参考.具体分析如下: 当我们的网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 1. 将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据. 2. 根据下载的文件类型来指定 Respon

百度云盘下载大文件不用百度云管家的方法

  [一].先将你要下载的大文件转存到你自己的百度云网盘,这一步必须; 例如:我将这个5G的文件转存到我的网盘 [二].转存后回到你自己的百度网盘主页,接下来,把你的目光移向浏览器的地址栏: 是不是看见一个英文字母"disk"?没错,把它改掉,改成"wap",哦,天哪!我们居然来到了百度云手机版!找到你转存的大文件,点击就可直接使用你的浏览器默认下载工具了: [三].直接点击[下载链接]: 立即进入你的浏览器默认下载界面(你也可以调用迅雷等工具下载了): [原理点解

百度云盘下载大文件却不用安装百度云管家怎么办

  一.先将你要下载的大文件转存到你自己的百度云网盘,这一步必须; 例如:我将这个5G的文件转存到我的网盘 二.转存后回到你自己的百度网盘主页,接下来,把你的目光移向浏览器的地址栏: 是不是看见一个英文字母"disk"?没错,把它改掉,改成"wap",哦,天哪!我们居然来到了百度云手机版!找到你转存的大文件,点击就可直接使用你的浏览器默认下载工具了: 三.直接点击[下载链接]: 立即进入你的浏览器默认下载界面(你也可以调用迅雷等工具下载了): 原理分析:就是将百度云

百度网盘如何直接下载大文件

  百度云盘大文件直接下载教程(免客户端下载大文件)最新简单方法: 1.你的浏览器一定是Chrome浏览器或者基于Chromium内核的浏览器如360浏览器极速版. 2.前往网页百度云资源页面,如图 3.如果正常点击下载,那么肯定会提示"你下载的文件过大,需要使用百度云管家". 那么重点来了! 在你的chrome浏览器地址栏里,在百度云页面网址前加上"https://"前缀,这是一个安全协议,百度云无法跳转.然后直接点击下载,就不会提示下载百度云了. 此前办法如下:

jmeter-怎么用Jmeter测试多用户下载大文件?

问题描述 怎么用Jmeter测试多用户下载大文件? 怎么配置那个请求里面的参数,Monitor Results 里面怎么一直没有数据? 解决方案 用jmeter进行多用户并发压力测试 解决方案二: 测试工具会有对应的技术指导啊,我们的工具就有