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