C# передача файла
Среда, января 5, 2011 by admin
В данной статье я собираюсь рассмотреть передачу файлов по сети, используя язык c# и возможности платформы .net
Демонстрационная программа по передаче файлов на c#
Краткая инструкция по передаче файлов на c#
Распакуйте архив, зайдите в папку filetransfer/bin/debug/ и запустите filetransfer.exe ДВА раза. Один будет для приема, другой для передачи(то есть, в одном окне с главной формы нажмите Send а в другом Receive) . В том, что для приема выберите папку (например c:received) и нажмите wait receive. Затем в том, что для передачи введите в hostname 127.0.0.1 и выберите файл для передачи и нажмите Send. Файл должен «передаться» и появиться в папке c:received под тем же именем. Если есть возможность, попробуйте на разных компьютерах. Узнайте ip принимающего компьютера на 2ip.ru и введите его в поле hostname окна для передачи.
Более подробно о том, как работает механизм передачи файлов.
Если рассмотреть вкратце возможности передачи файлов, то самые используемые для передачи именно с компьютера на компьютер – протоколы tcp и udp. Первый гарантирует доставку пакетов, а второй обладает чуть большей скоростью. В демонстрационной программе используется именно tcp протокол а также механизм сокетов.
Рассмотрим работу формы, посылающей данные и файлы на c#(SendForm). На ней есть поля для ввода ip адреса получателя (для тестирования попробуйте 127.0.0.1) и выбор файла для отправки. После того, как вы введете все данные, можно нажать кнопку Send и, если на нужном ip работает форма, ожидающая приема данных, произойдет отправка. При отправке производится вызов функции sendBackgroundWorker.RunWorkerAsync в которую передаются параметры – ip получателя и путь к отправляемому файлу.
Если вы не работали с BackgroundWorker – вот цитата из Msdn «Класс BackgroundWorker позволяет выполнить операцию в отдельном, выделенном потоке. Операции, требующие много времени, такие как загрузка и транзакции базы данных, могут создавать впечатление, что пользовательский интерфейс перестал отвечать на действия пользователя. Если необходимо обеспечить быстрое реагирование пользовательского интерфейса, а подобные операции приводят к длительным задержкам, эффективным решением может стать класс BackgroundWorker.» Проще говоря, он нужен чтобы в фоновом режиме осуществлять длительные операции и не давать зависать форме(интерфейсу). Функция BackgroundWorker.CancelAsync() которая также присутствует у этой формы, позволяет отменить слишком длительную операцию, для этого в коде отправки и присутствуют строки
if (sendBackgroundWorker.CancellationPending)
{
e.Cancel = true;
break;
}
Как же собственно происходит отправка и передача файлов? В c# для этого используются классы TcpClient и NetworkStream. Мы создаем соединение с получателем, используя его ip и определенный порт (в примере 20000)
TcpClient client = new TcpClient(argumen.Hostname, 20000);
Затем открываем наш файл на чтение и запрашиваем у получателя поток, в который собственно и будем писать данные из файла. Чтобы передать файлы любых форматов используется класс BinaryWriter , который позволяет нам писать в поток двоичные данные. Сначала мы пишем в наш поток имя файла и его размер(длину в байтах).
writer.Write(Path.GetFileName(argumen.Filename)); writer.Write(lenght);
Затем идет собственно сама передача в цикле.
do {
readBytes = inputStream.Read(buffer, 0, buffer.Length);
outputStream.Write(buffer, 0, readBytes);
totalBytes += readBytes;
} while (client.Connected && totalBytes < lenght);
Здесь мы читаем по 2048 байт из файла, пишем их в выходной поток (тот, который запросили у получателя) и делаем это до тех пор, пока не отправим весь файл или пока не отсоединимся от получателя (ну если вдруг компьютер получателя вырубится)
Далее рассмотрим работу формы, принимающей данные. Мы задаем папку для приема и затем запускается так называемая прослушка порта для приема (20000 в нашем случае).
[sourcecode language='csharp']
TcpListener listener = new TcpListener(IPAddress.Any, 20000);
listener.Start();
while (!listener.Pending())
{
/*это необязательный код для отмены прослушки
if (receiveBackgroundWorker.CancellationPending)
{
listener.Stop();
e.Cancel = true;
return;
}
*/
}
[/sourcecode]
То есть TcpListener слушает порт и пока кто-то не подключится крутится в вечном цикле. Далее как только кто-то подключился мы создаем для него TcpClient и начинаем прием файла.
[sourcecode language='csharp']TcpClient client = listener.AcceptTcpClient();
using (NetworkStream inputStream = client.GetStream())
using (BinaryReader reader = new BinaryReader(inputStream))
{
string filename = reader.ReadString();
long lenght = reader.ReadInt64();
using (FileStream outputStream = File.Open(Path.Combine(folder, filename), FileMode.Create))
{
long totalBytes = 0;
int readBytes = 0;
byte[] buffer = new byte[2048];
do
{
readBytes = inputStream.Read(buffer, 0, buffer.Length);
outputStream.Write(buffer, 0, readBytes);
totalBytes += readBytes;
receiveBackgroundWorker.ReportProgress(
(int)Math.Round(Convert.ToDouble(totalBytes) / Convert.ToDouble(lenght) * 100));
if (receiveBackgroundWorker.CancellationPending)
{
e.Cancel = true;
break;
}
} while (client.Connected && totalBytes < lenght);
}
}
[/sourcecode]
Здесь мы запрашиваем у клиента входной поток (в который он пишет данные из передаваемого файла), затем читаем из потока имя и длину файла и создаем файл с таким же именем в папке для приема. Ну и также читаем из потока по 2048 байт и сохраняем их в наш файл.
Если есть вопросы по этой теме, пишите в комментариях)
Мой блог находят по следующим фразам
- c# архивирование передача потока
- opencart модуль новостей
- mvc cms php
- протокол передачи файлов на c#
- opencart документация
- opencart документация
Мой блог находят по следующим фразам
17 Комментариев к “C# передача файла”
Оставить ответ
Обмен ссылками. Я не отвечаю за их названия. Если вам не нравятся какие-то ссылки оставьте отзыв(зеленая кнопка слева).
Меня читают
Купила себе копир – samsung ML 1865W
, картридж кончился и что теперь делать?
Посоветуйте, может кто сталкивался с samsung?
Картридж такой дорогой! Где подешевле найти картридж для
Купила здесь:
Best backlinks and website traffic service – we post your marketing message up to 100’000 forums worldwide price starting only from $29 Get amazing online web traffic using best backlink blast today. We can post your marketing post up to 100’000 forums around the web, get insane amount of backlinks and great targeted online web traffic in very short time. Most affordable and most powerful service for web traffic and backlinks in the world!!!! Your post will be published up to 100000 forums worldwide your website or blog will get instant traffic and massive increase in seo rankings just after few days or weeks so your site will get targeted long term traffic from search engines. Order now:
Hi! my identify is Jully. I would like to meemeet seemly urchin
This is my homepage –
Шкафы купе на заказ в Москве
Уважаемая администрация форума, большая просьба не считать данную статью за спам или рекламу. Поскольку не нашёл подходящей ветки для размещения моего топика, прошу модераторов данного форума переместить материал в подходящую для этого ветку. Заранее благодарствую!
Шкафы-купе представляют собой популярную разновидность современной мебели. Этому существует вполне логическое объяснение. Далеко не каждому из нас посчастливилось стать обладателем большой жилплощади, и большинство жителей Москвы проживают в городских квартирах со стандартной планировкой, неудобными простенками, углами и узкими коридорами. Целесообразно использовать данное пространство с обычной мебелью практически нереально. Единственным оптимальным решением в данной ситуации остается использовать встроенные шкафы-купе.
Наша компания предоставляет заказчику полный комплекс услуг, который подразумевает собой изготовление шкафов-купе на заказ в Москве . На всю нашу продукцию мы даем официальную гарантию. Если вам не удалось после долгих поисков подобрать для собственной квартиры оптимальные модели мебели или вы хотите заказать эксклюзивные модели – обращайтесь к нам. Изготовление шкафа-купе представляет собой сложный процесс технологического производства, который подразумевает использование современного оборудования, высококачественных материалов и наличие профессионального рабочего коллектива. Все эти требования постоянно соблюдаются в нашей компании.
Заказывая у нас шкафы-купе, вы всегда будете получать приятные скидки, и вам будет бесплатно предоставлен мастер для осуществления профессионального замера. Мы предлагаем вам именно у нас заказать шкаф-купе в Москве. Наши специалисты всегда гарантируют клиентам идеальное качество за вполне доступную цену. Вся предлагаемая нами продукция изготавливается из экологически чистых и прочных материалов. Во время производства будут учтены индивидуальные пожелания каждого клиента.
Адрес : Москва,Анненский проезд, д.15/17
Email :
Тел: +7 (495) 766-86-14 +7(495) 776-89-78
Путь к Истине начинается здесь –
Внимание! Это не реклама сайта – это «реклама» Истины,
которую должен знать каждый. Свои ссылки вы сможете
опубликовать на странице «Your site».
Most powerful&cost effective SEO and website traffic service in world get up to 100’000 forum backlinks now! Get amazing online web traffic using amazing backlink blast today. We are able post your custom message up to 100’000 forums around the web, get insane amount of backlinks and large targeted online web traffic in very short time. Most affordable and most powerful service for web traffic and backlinks in the world!!!! Your post will be published up to 100000 forums worldwide your website or blog will get instant traffic and massive increase in seo rankings just after few days or weeks so your site will get targeted long term traffic from search engines. Order now:
Путь к Истине начинается здесь:
Вы можете опубликовать ваши ссылки на странице » Ваш сайт «.