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

你可能感兴趣的:(socket)