zoukankan      html  css  js  c++  java
  • C# Socket大文件上传

     1     public sealed class SocketData
     2     {
     3         private SocketData()
     4         {
     5         }
     6 
     7         public static SendFileMode SendFile(Socket socket, string fileName, int maxBufferLength)
     8         {
     9             SendFileMode flag = SendFileMode.Success;
    10             try
    11             {
    12                 using (Stream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
    13                 {
    14                     long fileLength = fs.Length;
    15                     long leftLength = fileLength;
    16                     int readLength = 0;
    17                     byte[] buffer = null;
    18                     var file_name = System.IO.Path.GetFileName(fileName);
    19                     var bytefileName = System.Text.Encoding.UTF8.GetBytes(file_name + "|" + fs.Length);
    20                     socket.Send(bytefileName);
    21                     if (fileLength <= maxBufferLength)
    22                     {            /* 文件可以一次读取*/
    23                         buffer = new byte[fileLength];
    24                         readLength = fs.Read(buffer, 0, (int)fileLength);
    25                         //开始发送
    26                         socket.Send(buffer, SocketFlags.None);
    27                     }
    28                     else
    29                     {
    30                         while (leftLength != 0)
    31                         {
    32                             if (leftLength < maxBufferLength)
    33                             {
    34                                 buffer = new byte[leftLength];
    35                                 readLength = fs.Read(buffer, 0, Convert.ToInt32(leftLength));
    36                             }
    37                             else
    38                             {
    39                                 buffer = new byte[maxBufferLength];
    40                                 readLength = fs.Read(buffer, 0, maxBufferLength);
    41                             }
    42                             //开始发送
    43                             socket.Send(buffer, SocketFlags.None);
    44                             leftLength -= readLength;
    45                         }
    46                     }
    47                 }
    48             }
    49             catch (IOException)
    50             {
    51 
    52                 flag = SendFileMode.IOException;
    53             }
    54             return flag;
    55         }
    56     }
    SocketData
    1     public enum SendFileMode
    2     {
    3         IOException = -4,
    4         TimeOut = -1,
    5         Success = 0,
    6         SendFileError = -2,
    7         SocketException=-3
    8     }
    SendFileMode
  • 相关阅读:
    【转】合并两个List并去掉重复项
    vue父子组件的通信
    深入理解--VUE组件中数据的存放以及为什么组件中的data必需是函数
    Vue-组件模板抽离的写法
    VUE-父组件和子组件
    vue -全局组件和局部组件
    vue-组件化开发基础
    vue---v-model的详细解答
    map、filter、reduce函数的使用
    vue--购物车案例(小知识点总结)
  • 原文地址:https://www.cnblogs.com/gaobing/p/3851740.html
Copyright © 2011-2022 走看看