如何使用IOCP发送文件?

时间:2015-02-24 14:44:21

标签: c++ sockets winapi network-programming iocp

使用阻塞套接字时,我只需要打开文件并循环遍历它并以块的形式发送。

但我发现使用重叠套接字发送文件更具挑战性。我可以想到以下方法来做到这一点:

  1. 我打开文件并发送第一个块,然后跟踪 文件句柄和文件位置(我将这些数据存储在内存中)。
  2. 现在我收到一个表明某些数据的完成包 已发送,我检索文件句柄和文件位置并发送下一个块。
  3. 我重复第2步,直到我到达文件中的最后一个块,然后是我 关闭文件。
  4. 这种做法是否正确?

    注意:我不想使用TransmitFile()。


    编辑: 我已更新了我的问题。

2 个答案:

答案 0 :(得分:1)

最简单的方法:在MSDN上查找“TransmitFile”。此功能非常常见(例如,提供网页),它有一个特定的API。

答案 1 :(得分:1)

如果您不想使用TransmitFile(),则可以使用IOCP使用重叠文件I / O,其中使用文件读取完成来触发套接字写入并使用套接字写入完成触发文件读取。然后,您决定在传输过程中需要多少数据并发出多个文件读取并等待EOF ...