如何使用IOCP发送文件

How to send a file using IOCP?

本文关键字:文件 IOCP 何使用      更新时间:2023-10-16

当使用阻塞套接字时,发送文件所要做的就是打开文件并循环通过它并分块发送。

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

  1. 我打开文件并发送第一个区块,并跟踪文件句柄和文件位置(我将这些数据存储在内存中的某个位置)
  2. 现在,当我得到一个完成数据包,指示一些数据已发送,我检索文件句柄和文件位置并发送下一个块
  3. 我重复步骤2,直到到达文件中的最后一个块,然后关闭文件

这种方法正确吗?

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


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

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

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