一个简单的IOCP(IO完成端口)服务器/客户端类(2/2)

本文详细介绍了如何构建一个基于IO完成端口(IOCP)的简单服务器和客户端,重点讨论了文件传输的实现,并提供了源代码示例。同时,针对编译过程中可能遇到的问题,给出了三条实用的解决规则。
摘要由CSDN通过智能技术生成

5.1 文件传输

       使用Winsock 2.0 TransmitFile 函数传输文件 TransmitFile 函数在连接的套接字句柄上传输文件数据。此函数使用操作系统的缓冲管理机制接收文件数据,在套接字上提供高性能的文件传输。在异步文件传输上有以下几个重要方面:
l           除非 TransmitFile 函数返回,否则不能再对套接字执行 发送 写入 操作,不然会破坏文件的传输。在执行 PrepareSendFile(..) 函数后,所有对 ASend 函数的调用都是不允许的。
l           由于系统是连续读文件数据,打开文件句柄的 FILE_FLAG_SEQUENTIAL_SCAN 特性可以提高缓存性能。
l           在发送文件( TF_USE_KERNEL_APC )时,我们使用内核的异步程序调用。 TF_USE_KERNEL_APC 的使用可以带来明显的性能提升。很可能(尽管不一定),带有 TransmitFile 的线程的上下文环境的初始化会有沉重的计算负担;这种情况下可以防止反复执行APC(异步程序调用)。
文件传输的顺序如下:服务器通过调用 PrepareSendFile(..) 函数初始化文件传输。客户端接收到文件信息时,通过调用 PrepareReceiveFile(..) 函数准备接收,并且给服务器发送一个包来开始文件传输。在服务器收到包后,它调用使用高性能的 TransmitFile 函数的 StartSendFile(..) 函数传输指定的文件。
 

6 源代码例子

提供的源代码是一个模拟客户端/服务器的例子,它也提供了文件传输功能。在源码中,从类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值