Надёжная передача данных - 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д