Надёжная передача данных - 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();
}
}