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

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

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

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

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

textual
Листинг программы
private void button3_Click(object sender, EventArgs e)
        {
 
            //Отправляем файл
            //Добавим на форму OpenFileDialog и вызовем его
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //Коннектимся
                IPEndPoint EndPoint = new IPEndPoint(IPAddress.Parse(IP.Text), 6999);
                Socket Connector = new Socket(EndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                Connector.Connect(EndPoint);
                //Получаем имя из полного пути к файлу
 
                //Начинаем отправку данных
 
                NetworkStream MessageR = new NetworkStream(Connector);
                //-------------------------------------------------------------------------------  
                FileInfo file = new FileInfo(openFileDialog1.FileName);
                byte[] id = BitConverter.GetBytes((ushort)1);
                byte[] size = BitConverter.GetBytes(file.Length);
                byte[] fileName = Encoding.UTF8.GetBytes(file.Name);
                byte[] fileNameLength = BitConverter.GetBytes((ushort)fileName.Length);
                ;
                byte[] fileInfo = new byte[12];
                id.CopyTo(fileInfo, 0);
                size.CopyTo(fileInfo, 2);
                fileNameLength.CopyTo(fileInfo, 10);
                //fileName.CopyTo(fileInfo, 12);
 
                Connector.Send(fileInfo);
                Connector.Send(fileName);
                //--------------------------------------------------------------------------------
 
 
 
                Byte[] ReadedBytes = new Byte[file.Length];
                Byte[] summa = new Byte[4];
                //ReadedBytes.Count();
                using (var FileStream = new FileStream(openFileDialog1.FileName, FileMode.Open))
                {
                    using (var Reader = new BinaryReader(FileStream))
                    {
                        Int32 CurrentReadedBytesCount;
 
                        //do
                        //{
                            CurrentReadedBytesCount = Reader.Read(ReadedBytes, 0, ReadedBytes.Length);
 
                            MessageR.Write(ReadedBytes, 0, CurrentReadedBytesCount);
                            //Connector.Send(ReadedBytes, CurrentReadedBytesCount, SocketFlags.None);
                        //}
                        //while (CurrentReadedBytesCount == ReadedBytes.Length);
                    } 
                }
                //Завершаем передачу данных;
                MessageR.Flush();
                Connector.Close();
            }
        }

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


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

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

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