问题描述
大概的代码如下: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