永发信息网

c#socket怎么传输大数据

答案:1  悬赏:50  手机版
解决时间 2021-01-31 05:48
c#socket怎么传输大数据
最佳答案
const int blockLength=512*1024;
public void SendFile(string filePath, NetworkStream stream)     //发送文件
        {
            //传输内容
            using (FileStream fs = File.Open(filePath, FileMode.Open))
            {
                int readLength = 0;
                byte[] data = new byte[blockLength];

                //发送大小
                byte[] length = new byte[8];
                BitConverter.GetBytes(new FileInfo(filePath).Length).CopyTo(length, 0);
                stream.Write(length, 0, 8);

                //发送文件
                while ((readLength = fs.Read(data, 0, blockLength)) > 0)
                {
                    stream.Write(data, 0, readLength);
                }
            }

        }

public bool ReceiveFile(string fileName, NetworkStream stream) //接收文件
        {
            try
            {
                long count = GetSize(stream);
                if (count == 0)
                {
                    return false;
                }
                long index = 0;
                int currentBlockLength = 0;
                int receivedBytesLen = 1;
                using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate))
                {
                    while (receivedBytesLen > 0 && index < count)
                    {
                        byte[] clientData = new byte[blockLength];
                        receivedBytesLen = 0;

                        if (blockLength < count - index)
                        {
                            currentBlockLength = blockLength;
                        }
                        else
                        {
                            currentBlockLength = (int)(count - index);
                        }
                        receivedBytesLen = stream.Read(clientData, 0, currentBlockLength);
                        fs.Write(clientData, 0, receivedBytesLen);
                        index += receivedBytesLen;
                    }
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
            return true;
        }

private int GetSize(NetworkStream stream) //获取文件大小
        {
            int count = 0;
            byte[] countBytes = new byte[8];
            try
            {
                if (stream.Read(countBytes, 0, 8) == 8)
                {
                    count = BitConverter.ToInt32(countBytes, 0);
                }
                else
                {
                    return 0;
                }
            }
            catch
            {
                return 0;
            }
            return count;
        }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
u盘写保护无法格式化
海韵美甲(前应路店)地址在什么地方,我要处理
已知7x的m次方y的3m-2n次方和-3x的2n-2次方y
兰因璧月是且试天下的续集吗?
小孩子课本有个字谜:一半绿,一半红,红的怕
生活美(周巷店)地址在哪,我要去那里办事
广东离湖北省多远?
搜剪美甲地址在哪,我要去那里办事
移印有毒吗
你以前在柬埔寨的颖昌鞋厂吗?你qq多少?我准
鸟儿为什么能在天空中飞翔?他的骨头有什么特
05款伊兰特故障码0560什么意思
韵色美甲(横河店)地址好找么,我有些事要过去
雪涵美甲地址在什么地方,我要处理点事
液体可压缩吗上学时好像说液体有不可压缩性,
推荐资讯
饶平有什么发展
华为手机的部落冲突没有声音特效
提家村地址在哪,我要去那里办事
图中,两条相邻等高线海拔相差100m,回答题。
表格中如何将每一行复制三行
安能快递(上街西充农商银行旁安能快递)地址在
中兴一体机怎么插卡
铁锂电池和三元锂电池充电器能通用吗
六爻可以看出一个人的长相,性格,身高,工作
如图 在△abc中 ab=ac ∠a=36° bd ce分别
魅力新娘(朱砂镇菜市街西口向北10米路西魅力
精诚广告印刷(人民路与文卫路交叉口北200米精
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?