как добавить элементы в очередь, а затем начать отправлять их один за другим? - PullRequest
0 голосов
/ 29 февраля 2012

enter image description here

Я делаю приложение для передачи файлов между (клиент-сервер) и имею инструменты, которые мне нужны, но я немного запутался в том, как отправлять файлы. Вот что у меня есть:

  • localListView - инструмент, с помощью которого я могу получить selectedItems, который имеет имя файла, путь, текущий адрес и т. Д.
  • remoteListView - то же, что и выше
  • Метод отправки, который принимает исходный путь (filePath из localListView) и DestinationPath (currAddress из remoteListView)
  • Инструменты внизу рисунка - это инструмент XPTable

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

Как мне это сделать?

Пожалуйста, если у вас есть хорошее представление о том, как это можно сделать в c #, псевдокоде или во всем, что могло бы мне помочь, я был бы благодарен.

Ответы [ 2 ]

1 голос
/ 06 марта 2012

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

item.Tag = false;

затем, когда вы начнете отправлять элементы .. он проверит тег каждого элемента, если false (еще не отправлен), вы отправите его и установите для его тега значение True (элемент отправлен) и т. Д.

void startTransferFiles()
{
    foreach (ListViewItem item in listView1.Items)
    {
        if ((bool)item.Tag == false)
        {
            Send(item.ToolTipText);
            item.Tag = true;
        }
    }
}
1 голос
/ 29 февраля 2012

Поскольку я не совсем уверен, где вам нужна помощь, я дам вам обзор хороших методов:

Я полагаю, вам придется реализовать ответ. Я ожидаю, что вы уже используете TCP, который поставляется с автоматической проверкой правильности полученных пакетов. Но с этой встроенной функциональностью вы не можете проверить, что целые файлы были успешно отправлены.

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

Наличие функции отправки / ответа или отправки / прослушивания как от вашего клиента, так и от сервера - это хороший способ отодвинуть ошибки или подтверждения от одного к другому и поддерживать работу обоих концов - зная, что делает другой.

Если вы пытаетесь минимизировать посылку пакетов между клиентом и сервером, вы можете использовать UDP, но это действительно плохой вариант для таких вещей, как передача файлов. Вы также можете просто передавать все свои данные большими порциями, а не по крупицам - но вы не получите никакой реальной проверки каждого отправляемого файла, как вы хотите.

...