创新路
我们一直在努力

一个简单文件传输方法

        /// <summary>

        /// 发送文件

        /// </summary>

        /// <param name="socket">连接</param>

        /// <param name="fileName">文件名</param>

        /// <param name="allBufferLength">读取长度</param>

        /// <returns></returns>

        public int SendFile(Socket socket, string fileName, int allBufferLength, int outTime)

        {

            int flag = 0;

            try

            {

                FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);

                long filelen = fs.Length;          // 文件长度

                long leftlen = filelen;            // 未读取文件长度

                int readlen = 0;                   //以读取部分

                byte[] buffer = null;

                progressBar1.Maximum = (int)filelen;

                progressBar1.Minimum = 0;

                if (filelen <= allBufferLength)    //一次性发送

                {

                    buffer = new byte[leftlen];

                    readlen = fs.Read(buffer, 0, (int)filelen);

                    flag = SendData(socket, buffer, outTime);

                    progressBar1.Step = readlen;

                    progressBar1.PerformStep();

                }

                else                              //短点发送

                {

                    while (leftlen != 0)

                    {

                        if (leftlen < allBufferLength)

                        {

                            buffer = new byte[leftlen];

                            readlen = fs.Read(buffer, 0, Convert.ToInt32(leftlen));

                        }

                        else

                        {

                            buffer = new byte[allBufferLength];

                            readlen = fs.Read(buffer, 0, allBufferLength);

                        }

                        if ((flag=SendData(socket,buffer,outTime))>0)

                        {

                            break;

                        }

                        progressBar1.Step = readlen;

                        progressBar1.PerformStep();

                        leftlen -= readlen;

                    }

                }

                fs.Flush();

                fs.Close();

            }

            catch

            {

                flag = -4;

            }

            socket.Close();

            return flag;

        }

        /// <summary>

        /// 发送文件流

        /// </summary>

        /// <param name="socket"></param>

        /// <param name="buffer"></param>

        /// <param name="outTime"></param>

        /// <returns></returns>

        public static int SendData(Socket socket, byte[] buffer, int outTime)

        {

            int flag = 0;

            try

            {

                int left = buffer.Length;

                int sndLen = 0;

                while (true)

                {

                    if ((socket.Poll(outTime *100, SelectMode.SelectWrite) == true))

                    {

                        sndLen = socket.Send(buffer, 0, left, SocketFlags.None);

                        left -= sndLen;

                        if (left == 0)

                        {

                            flag = 0;

                            break;

                        }

                        else

                        {

                            if (sndLen > 0)

                            {

                                continue;

                            }

                            else

                            {

                                flag = -2;

                                break;

                            }

                        }

                    }

                }

            }

            catch (Exception)

            {

                flag = -3;

            }

            return flag;

        }

未经允许不得转载:天府数据港官方信息博客 » 一个简单文件传输方法

客官点个赞呗! (0)
分享到:

相关推荐

  • 暂无文章

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机