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

转载于:https://www.cnblogs.com/gaobing/p/3851740.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值