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 байт и сохраняем их в наш файл.

Если есть вопросы по этой теме, пишите в комментариях)

Мой блог находят по следующим фразам

Мой блог находят по следующим фразам

45 Комментариев к “C# передача файла”

  1. … [Trackback]…

    [...] There you will find 70266 more Infos: rosomakho.ru/blog/c-sharp-peredacha-fajla/ [...]…

  2. … [Trackback]…

    [...] There you will find 64161 more Infos: rosomakho.ru/blog/c-sharp-peredacha-fajla/ [...]…

  3. seo:

    … [Trackback]…

    [...] Read More: rosomakho.ru/blog/c-sharp-peredacha-fajla/ [...]…

  4. … [Trackback]…

    [...] Informations on that Topic: rosomakho.ru/blog/c-sharp-peredacha-fajla/ [...]…

  1. 1
    Алекс:

    Привет! Давно меня эта тема беспокоит — передача через TCP.

    В очередной раз пробую, по задаче надо передавать файл. убил ещё один вечер, но наконец 3,2 GB файл передался 1 к 1.

    Кстати,


    string filename = reader.ReadString();
    long lenght = reader.ReadInt64();

    readBytes = inputStream.Read(buffer, 0, buffer.Length);
    outputStream.Write(buffer, 0, readBytes);
    totalBytes += readBytes;

    лучше писать иначе


    string filename = reader.ReadString();
    long lenght = reader.ReadInt64();

    int ostatok = (int)(lenght-totalBytes>buffer.Length? buffer.Length:lenght-totalBytes);

    readBytes = inputStream.Read(buffer, 0, ostatok);
    outputStream.Write(buffer, 0, readBytes);
    totalBytes += readBytes;

    Потому что если читать максимальное количество байтов, в более сложном протоколе можно прочесть кусок данных принадлежащий следующему вызову сервера.

  2. 2

    Get up to 100000 forum backlinks with our backlinks service & massive targeted traffic Get amazing online web traffic using best backlink blast today. We can post your custom message up to 100’000 forums around the web, get insane amount of backlinks and great targeted 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: backlink service

  3. 3

    Earn up to $3500/month just by taking simple surveys online!

    I tried one of those online survey sites about 4 months ago that
    say all you have to do is spend a couple of minutes filling out
    some surveys and you will be making hundreds a day….. YEAH RIGHT, I didn’t make anything.

    I joined 7 of these stupid websites and I actually tried filling
    out a couple of surveys on each site and they took forever then at
    the end they wanted me to buy things or I couldn’t complete the
    survey.

    These are complete scams so be aware!!! I couldn’t believe they
    were even allowed to sell such bogus products.

    Then about 2 weeks ago I was watching the news and they had some
    vice presidents and marketing managers of some major multi million
    dollar companies talking about a site that they personally work
    with to pay consumers for their opinion, A site that actually just
    wants the «average Joe’s» honest opinion on products and services
    and is willing to pay big money to get them. for more information
    clik here: http://take-survey-and-get-money.info

  4. 4

    то что я искал, спасибо

  5. 5

    http://nextonmarket.spb.ru — справочник компаний Санкт-Петербурга

  6. 6

    Get up to 100000 forum backlinks with our backlinks service & massive targeted traffic Get incredible online web traffic using superb backlink blast today. We are able post your custom message up to 100’000 forums around the web, get insane amount of backlinks and incredible targeted web traffic in shortest 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: backlink service

  7. 7

    на этом портале можно увидеть http://wow-clear.ru/ WOT

  8. 8

    Копии телефонов премиум-класса
    Доброго времени суток! Интернет-магазин копий элитных телефонов. (Финляндия, Китай)
    Мы внимательно следим за новейшими тенденциями в мире высоких технологий, благодаря этому здесь представлены наиболее качественные и технологичные средства связи. Надеемся, что широкий ассортимент и низкие цены в нашем магазине помогут Вам сделать правильный выбор. Будьте на связи! : )
    Комплектация телефонов: оригинальная коробка, телефон, USB кабель, зарядное устройство, наушники, инструкция.
    Оплата товара после доставки курьером и проверки вами.
    Вы можете приобрести телефон в нашем интернет магазине, мы работаем как с Москвой, так и другими городами России. У нас представлены копии телефонов Vertu, IPhone, Vertu Ascent, Vertu Constellation, Vertu Signature, Cartier, GoldVish, Louis Vuitton, Mobiado, Nokia Luxury, Rado, Tag Heuer, Versace, и различные смартфоны.

    На все телефоны, купленные в нашем магазине, распространяются гарантийные обязательства.
    Гарантийное обслуживание включает в себя бесплатный ремонт или замену вышедших из строя комплектующих в течение 1 (одного) года с момента приобретения изделия.

    ВНИМАНИЕ! Информация на сайте является АКТУАЛЬНОЙ, и она обновляется каждый день.

    http://tinyurl.com/kopii-telefonov

  9. 9

    Old chap caps’ standards won in transit to prevail students. http://sukbewa.com

  10. 10

    Игра загадочный дом из Вконтакта имеет баг благодоря которому можно легко и быстро получить монеты и алмазы!
    http://secret-house.tk — заходим и качаемся!

  11. 11

    Купила себе копир — samsung ML 1865W
    , картридж кончился и что теперь делать?
    Посоветуйте, может кто сталкивался с samsung?
    Картридж такой дорогой! Где подешевле найти картридж для
    Купила здесь: заправка картриджей samsung ML 1865W

  12. 12

    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: backlinks

  13. 13

    Hi! my identify is Jully. I would like to meemeet seemly urchin :)
    This is my homepage — http://jskdh5jkd7djh4.com/l

  14. 14

    Шкафы купе на заказ в Москве

    Уважаемая администрация форума, большая просьба не считать данную статью за спам или рекламу. Поскольку не нашёл подходящей ветки для размещения моего топика, прошу модераторов данного форума переместить материал в подходящую для этого ветку. Заранее благодарствую!

    Шкафы-купе представляют собой популярную разновидность современной мебели. Этому существует вполне логическое объяснение. Далеко не каждому из нас посчастливилось стать обладателем большой жилплощади, и большинство жителей Москвы проживают в городских квартирах со стандартной планировкой, неудобными простенками, углами и узкими коридорами. Целесообразно использовать данное пространство с обычной мебелью практически нереально. Единственным оптимальным решением в данной ситуации остается использовать встроенные шкафы-купе.
    Наша компания предоставляет заказчику полный комплекс услуг, который подразумевает собой изготовление шкафов-купе на заказ в Москве . На всю нашу продукцию мы даем официальную гарантию. Если вам не удалось после долгих поисков подобрать для собственной квартиры оптимальные модели мебели или вы хотите заказать эксклюзивные модели – обращайтесь к нам. Изготовление шкафа-купе представляет собой сложный процесс технологического производства, который подразумевает использование современного оборудования, высококачественных материалов и наличие профессионального рабочего коллектива. Все эти требования постоянно соблюдаются в нашей компании.
    Заказывая у нас шкафы-купе, вы всегда будете получать приятные скидки, и вам будет бесплатно предоставлен мастер для осуществления профессионального замера. Мы предлагаем вам именно у нас заказать шкаф-купе в Москве. Наши специалисты всегда гарантируют клиентам идеальное качество за вполне доступную цену. Вся предлагаемая нами продукция изготавливается из экологически чистых и прочных материалов. Во время производства будут учтены индивидуальные пожелания каждого клиента.

    Адрес : Москва,Анненский проезд, д.15/17

    Email : zakaz@invit-mebel.ru
    Тел: +7 (495) 766-86-14 +7(495) 776-89-78

  15. 15

    Путь к Истине начинается здесь — http://a.freewey.com
    Внимание! Это не реклама сайта — это «реклама» Истины,
    которую должен знать каждый. Свои ссылки вы сможете
    опубликовать на странице «Your site».

  16. 16

    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: backlink service

  17. 17

    Путь к Истине начинается здесь: http://b.freewey.com
    Вы можете опубликовать ваши ссылки на странице » Ваш сайт «.

  18. 18

    Дорогие Друзья заходите на наш сайт, его так легко запомнить, на нем Вы найдете громадную коллекцию фильмов, всех жанров и направлений документальные фильмы . Ежечасные обновления, старые, документальные, отечественные и зарубежные фильмы всех жанров. Рай для киноманов. Только лучшее, только для Вас!!!

  19. 19

    Путь к Истине начинается здесь: http://a.truewey.ru
    Вы можете опубликовать ваши ссылки на странице «Ваш сайт».

  20. 20

    здесь на этом ресурсе можно купить распашные шкафы на заказ

Оставить ответ

Перед отправкой формы:
Human test by Not Captcha





Обмен ссылками. Я не отвечаю за их названия. Если вам не нравятся какие-то ссылки оставьте отзыв(зеленая кнопка слева).

Меня читают

  • цены во вьетнаме