如何使用 IOCP 发送文件?
How to send a file using IOCP?
当使用阻塞套接字时,我发送文件所要做的就是打开文件并循环遍历它并以块的形式发送它。
但我发现使用重叠套接字发送文件更具挑战性。我可以想到以下方法来做到这一点:
- 我打开文件并发送第一个块,并跟踪
文件句柄和文件位置(我将这些数据存储在内存中的某个位置)。
- 现在当我收到一个完成数据包,表明一些数据已经
已发送,我检索文件句柄和文件位置并发送下一个块。
- 我重复第 2 步,直到到达文件中的最后一个块,然后我
关闭文件。
这种方法正确吗?
注意:我不想使用 TransmitFile()。
编辑: 我已经更新了我的问题。
最简单的方法:在 MSDN 上查找 'TransmitFile'。此功能非常常见(例如,提供网页),因此有一个特定的 API。
如果您不想使用 TransmitFile()
那么您可以使用重叠文件 I/O 使用 IOCP,其中文件读取的完成用于触发套接字写入和套接字写入用于触发文件读取。然后,您决定要传输多少数据并发出多少文件读取并等待 EOF...
当使用阻塞套接字时,我发送文件所要做的就是打开文件并循环遍历它并以块的形式发送它。
但我发现使用重叠套接字发送文件更具挑战性。我可以想到以下方法来做到这一点:
- 我打开文件并发送第一个块,并跟踪 文件句柄和文件位置(我将这些数据存储在内存中的某个位置)。
- 现在当我收到一个完成数据包,表明一些数据已经 已发送,我检索文件句柄和文件位置并发送下一个块。
- 我重复第 2 步,直到到达文件中的最后一个块,然后我 关闭文件。
这种方法正确吗?
注意:我不想使用 TransmitFile()。
编辑: 我已经更新了我的问题。
最简单的方法:在 MSDN 上查找 'TransmitFile'。此功能非常常见(例如,提供网页),因此有一个特定的 API。
如果您不想使用 TransmitFile()
那么您可以使用重叠文件 I/O 使用 IOCP,其中文件读取的完成用于触发套接字写入和套接字写入用于触发文件读取。然后,您决定要传输多少数据并发出多少文件读取并等待 EOF...