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

dave2804933 2016-06-28 05:20:15
大概的代码如下:
this.sendCommand("RETR " + strRemoteFileName);
if (this.mIntReplyCode != 150 && this.mIntReplyCode != 125 && this.mIntReplyCode != 226 && this.mIntReplyCode != 250)
{
fileStream2.Close();
throw new IOException(this.mStrReply.Substring(4));
}

while (true)
{
try
{
int num2 = 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 (Exception e)
{
throw new IOException(e.Message);
}
}

有时候下载大文件时会卡死在int num2 = socket2.Receive(this.mBuffer, this.mBuffer.Length, SocketFlags.None);
小文件没有问题,是什么原因造成的?
...全文
214 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gamedevboy 2016-06-29
  • 打赏
  • 举报
回复
简单处理的话,加 Task.Run(()=> { socket.Recevice(....); }); 复杂的话用Socket.ReceiveAsync
dave2804933 2016-06-29
  • 打赏
  • 举报
回复
加个System.Threading.Thread.CurrentThread.Join(20);这个吗?
  • 打赏
  • 举报
回复
this.sendCommand("RETR " + strRemoteFileName);
                if (this.mIntReplyCode != 150 && this.mIntReplyCode != 125 && this.mIntReplyCode != 226 && this.mIntReplyCode != 250)
                {
                    fileStream2.Close();
                    throw new IOException(this.mStrReply.Substring(4));
                }

                while (true)
                {
                    try
                    {
                        int num2 = 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 (Exception e)
                    {
                        throw new IOException(e.Message);
                    }
                }
试试

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧