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