Передача файлов без потерь - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет! Подскажите каким образом организовать передачу файлов по локалке без потерь(протокол TCP)? Есть у меня код по передаче файлов, мелкие файлы (примерно до 20 мб) передаёт нормально, а вот побольше которые, идут с потерями. Сервер:
Листинг программы
  1. protected void FileReceiver()
  2. {
  3. string myHost = System.Net.Dns.GetHostName();
  4. string myIP = System.Net.Dns.GetHostByName(myHost).AddressList[0].ToString();
  5. IPAddress localAddr = IPAddress.Parse(myIP);
  6. TcpListener Listen = new TcpListener(localAddr, 6999);
  7. Listen.Start();
  8. Socket ReceiveSocket;
  9. while (true)
  10. {
  11. try
  12. {
  13. ReceiveSocket = Listen.AcceptSocket();
  14. Byte[ ] Receive = new Byte[ 256];
  15. using (MemoryStream MessageR = new MemoryStream())
  16. {
  17.  
  18. Int32 ReceivedBytes;
  19. Int32 Firest256Bytes = 0 ;
  20. String FilePath = "" ;
  21. do
  22. {
  23. ReceivedBytes = ReceiveSocket.Receive(Receive, Receive.Length, 0 );
  24. //Разбираем первые 256 байт
  25. if (Firest256Bytes < 256 )
  26. {
  27. Firest256Bytes += ReceivedBytes;
  28. Byte[ ] ToStr = Receive;
  29. if (Firest256Bytes > 256 )
  30. {
  31. Int32 Start = Firest256Bytes - ReceivedBytes;
  32. Int32 CountToGet = 256 - Start;
  33. Firest256Bytes = 256 ;
  34.  
  35. ToStr = Receive.Take(CountToGet).ToArray();
  36. Receive = Receive.Skip(CountToGet).ToArray();
  37. MessageR.Write(Receive, 0 , ReceivedBytes);
  38. }
  39. FilePath += Encoding.Default.GetString(ToStr);
  40. } else
  41.  
  42. MessageR.Write(Receive, 0 , ReceivedBytes);
  43. } while (ReceivedBytes == Receive.Length);
  44. String resFilePath = FilePath.Substring(0, FilePath.IndexOf("\0" ));
  45. using (var File = new FileStream(resFilePath, FileMode.Create))
  46. {
  47. File.Write(MessageR.ToArray(), 0 , MessageR.ToArray().Length);
  48. }
  49. ChatBox.BeginInvoke(AcceptDelegate, new object[ ] { "Received: " + resFilePath, ChatBox });
  50. }
  51. }
  52. catch (System.Exception ex)
  53. {
  54. MessageBox.Show(ex.Message);
  55. }
  56. }
  57. }
Клиент:
Листинг программы
  1. private void button3_Click(object sender, EventArgs e)
  2. {
  3.  
  4. if (openFileDialog1.ShowDialog() == DialogResult.OK)
  5. {
  6. IPEndPoint EndPoint = new IPEndPoint(IPAddress.Parse(IP.Text), 6999);
  7. Socket Connector = new Socket(EndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  8. Connector.Connect(EndPoint);
  9. StringBuilder FileName = new StringBuilder(openFileDialog1.FileName);
  10. MessageBox.Show(openFileDialog1.FileName);
  11. int index = FileName.Length - 1;
  12. while (FileName[index] != '\\' && FileName[index] != '/')
  13. {
  14. index--;
  15. }
  16.  
  17. String resFileName = "";
  18. for (int i = index + 1; i < FileName.Length; i++)
  19. resFileName += FileName[i];
  20. List<Byte> First256Bytes = Encoding.Default.GetBytes(resFileName).ToList();
  21. Int32 Diff = 256 - First256Bytes.Count;
  22. for (int i = 0; i < Diff; i++)
  23. First256Bytes.Add(0);
  24. Byte[] ReadedBytes = new Byte[256];
  25. using (var FileStream = new FileStream(openFileDialog1.FileName, FileMode.Open))
  26. {
  27. using (var Reader = new BinaryReader(FileStream))
  28. {
  29. Int32 CurrentReadedBytesCount;
  30. Connector.Send(First256Bytes.ToArray());
  31. do
  32. {
  33. CurrentReadedBytesCount = Reader.Read(ReadedBytes, 0, ReadedBytes.Length);
  34. Connector.Send(ReadedBytes, CurrentReadedBytesCount, SocketFlags.None);
  35. }
  36. while (CurrentReadedBytesCount == ReadedBytes.Length);
  37. }
  38. }
  39. Connector.Close();
  40. }
  41. }
Люди, кто понимает подскажите как организовать это без потерь. Код переправлять не надо, я сам всё сделаю, просто дайте совет!

Решение задачи: «Передача файлов без потерь»

textual
Листинг программы
  1. string fileName = Encoding.UTF8.GetString(first256Bytes, 0, Array.IndexOf(first256Bytes, 0));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы