Надёжная передача данных - C#

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

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

Ребята объясните кто понимает, ни как ни доходит до меня. Вообщем мучаюсь с программой клиент - сервер, мелкие файлы нормально пересылаются, а вот с большими проблема, просто почему то не доходят. В инети нашёл такую информацию то что нужно файл разбить на пакеты(желательно по 64 байта) и отправлять вместе с контрольной суммой, и там видимо на серваке её сверять с размером пакета, ну допустим будет разница и что же тогда дальше делать? заново этот пакет отправлять или как? И кстати такая проблема появляется при передаче на другой компьютер, на одном всё норм, может это из за кабеля(подключённого между компами), я уже просто не знаю, всю голову сломал(( Программа написана на сокетах, протокол TCP.

Решение задачи: «Надёжная передача данных»

textual
Листинг программы
  1. private void button3_Click(object sender, EventArgs e)
  2.         {
  3.  
  4.             //Отправляем файл
  5.             //Добавим на форму OpenFileDialog и вызовем его
  6.             if (openFileDialog1.ShowDialog() == DialogResult.OK)
  7.             {
  8.                 //Коннектимся
  9.                 IPEndPoint EndPoint = new IPEndPoint(IPAddress.Parse(IP.Text), 6999);
  10.                 Socket Connector = new Socket(EndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  11.                 Connector.Connect(EndPoint);
  12.                 //Получаем имя из полного пути к файлу
  13.  
  14.                 //Начинаем отправку данных
  15.  
  16.                 NetworkStream MessageR = new NetworkStream(Connector);
  17.                 //-------------------------------------------------------------------------------  
  18.                 FileInfo file = new FileInfo(openFileDialog1.FileName);
  19.                 byte[] id = BitConverter.GetBytes((ushort)1);
  20.                 byte[] size = BitConverter.GetBytes(file.Length);
  21.                 byte[] fileName = Encoding.UTF8.GetBytes(file.Name);
  22.                 byte[] fileNameLength = BitConverter.GetBytes((ushort)fileName.Length);
  23.                 ;
  24.                 byte[] fileInfo = new byte[12];
  25.                 id.CopyTo(fileInfo, 0);
  26.                 size.CopyTo(fileInfo, 2);
  27.                 fileNameLength.CopyTo(fileInfo, 10);
  28.                 //fileName.CopyTo(fileInfo, 12);
  29.  
  30.                 Connector.Send(fileInfo);
  31.                 Connector.Send(fileName);
  32.                 //--------------------------------------------------------------------------------
  33.  
  34.  
  35.  
  36.                 Byte[] ReadedBytes = new Byte[file.Length];
  37.                 Byte[] summa = new Byte[4];
  38.                 //ReadedBytes.Count();
  39.                 using (var FileStream = new FileStream(openFileDialog1.FileName, FileMode.Open))
  40.                 {
  41.                     using (var Reader = new BinaryReader(FileStream))
  42.                     {
  43.                         Int32 CurrentReadedBytesCount;
  44.  
  45.                         //do
  46.                         //{
  47.                             CurrentReadedBytesCount = Reader.Read(ReadedBytes, 0, ReadedBytes.Length);
  48.  
  49.                             MessageR.Write(ReadedBytes, 0, CurrentReadedBytesCount);
  50.                             //Connector.Send(ReadedBytes, CurrentReadedBytesCount, SocketFlags.None);
  51.                         //}
  52.                         //while (CurrentReadedBytesCount == ReadedBytes.Length);
  53.                     }
  54.                 }
  55.                 //Завершаем передачу данных;
  56.                 MessageR.Flush();
  57.                 Connector.Close();
  58.             }
  59.         }

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


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

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

6   голосов , оценка 4.667 из 5

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

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

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