如何将项目添加到队列然后开始一个接一个地发送它们?

时间:2012-02-29 15:17:17

标签: c# queue client-server send

enter image description here

我正在(客户端 - 服务器)之间创建文件传输应用程序并拥有我需要的工具,但我对如何发送文件感到有些困惑。这就是我所拥有的:

  • localListView - 我可以获取具有fileName,路径,当前地址等的selectedItems的工具
  • remoteListView - 与上述相同
  • 发送获取源路径(来自localListView的filePath)和DestinationPath(来自remoteListView的currAddress)的方法
  • 图片底部的工具是XPTable工具

它们都运行正常,但我只需要一种方法来编写代码来将我想要发送的项目放入队列中。我还需要一个指向我的应用程序发送的当前文件的指针。成功发送第一个文件后,指针应转到列表中的下一个文件并启动发送方法。

我该怎么做?

如果您对c#或伪代码或任何可以帮助我的任何事情有所了解,请知道我会感激不尽。

2 个答案:

答案 0 :(得分:1)

由于我不完全确定你需要帮助的地方,我会概述一下好的技巧:

我想你必须实施回复。 我希望您已经使用TCP,它会自动验证正确接收的数据包。但是,使用此内置功能,您无法验证是否已成功发送整个文件。

如果您可以增加服务器和客户端之间发送的数据包数量,则可以编写服务器在收到整个文件时发送的回复。获得此回复后,指针可以增加1(转到下一个列表项),send方法将与下一个文件一起运行,整个过程将重复。

从客户端和服务器发送/回复或推送/监听功能是将错误或确认从一个推送到另一个的好方法,并使两端保持正常工作 - 了解对方正在做什么。

如果您尝试最小化在客户端和服务器之间发送的数据包,则可以使用UDP,但这对于文件传输等问题确实不是一个好的选择。您也可以简单地将所有数据流式传输到一个大块中,而不是一点一点地流式传输 - 但是您无法根据需要对每个要发送的文件进行真正的验证。

答案 1 :(得分:1)

您可以这样做..当您将项目添加到列表中时..将每个项目标记设置为false ..这意味着您尚未发送它

item.Tag = false;

然后当你开始发送物品..它会检查每个物品的标签,如果为假(尚未发送),你将发送它并将其标签设置为True(物品已发送)等等

void startTransferFiles()
{
    foreach (ListViewItem item in listView1.Items)
    {
        if ((bool)item.Tag == false)
        {
            Send(item.ToolTipText);
            item.Tag = true;
        }
    }
}