TransmitFile使用心得

BOOL TransmitFile(
  SOCKET hSocket,                            
  HANDLE hFile,                              
  DWORD nNumberOfBytesToWrite,               
  DWORD nNumberOfBytesPerSend,               
  LPOVERLAPPED lpOverlapped,                 
  LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, 
  DWORD dwFlags                              
);
 参数:
hSocket
面向连接的SOCKET句柄。
hFile
已打开的文件句柄
nNumberOfBytesToWrite
要传送的字节数。0值表示传送整个文件。
nNumberOfBytesPerSend
每次传送的数据块的大小。0值表示使用SOCKET LAYER的默认值。
lpOverlapped
指向OVERLAPPED结构的指针。NULL值表示不开启overlapped I/O模式。

如果使用overlapped I/O模式

必须分配一个OVERLAPPED结构,并初始化它的Offset、OffsetHigh和hEvent成员。当设备是文件时,Offset和OffsetHigh才有用,对于其它设备,这两个成员必须被设置成0。

当访问文件时,Offset和OffsetHigh指出了文件中你想要开始I/O操作的64位偏移量,例如:如果你想从一个文件的第123字节开始读取100个字节,可以这样做

  FOverlapped.Overlapped.Offset := Int64Low(iOffset);//开始的字节数
  FOverlapped.Overlapped.OffsetHigh := Int64High(iOffset);//不为0 表示对文件操作


lpTransmitBuffers
指向TRANSMIT_FILE_BUFFERS结构指针。NULL值表示仅仅传输文件。
dwFlags
6个值可选:

        TF_DISCONNECT 

        TF_REUSE_SOCKET 

        TF_USE_DEFAULT_WORKER

        TF_USE_SYSTEM_THREAD

 

        TF_WRITE_BEHIND (指示TransmitFile请求应该立即返回,即使是数据还没有被远端服务器确认 ,该标准不应该和 TF_DISCONNECT和TF_REUSE_SOCKET 一起使用

)

        TF_USE_KERNEL_APC(指示使用内核异步调用 Asynchronous Procedure Call - APC 而不使用工作线程来处理。注意内核APC仅当应用程序处理等待状态时才被调用 )

 

可参考:

http://uuxa.itpub.net/post/18860/204888

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值