读书人

TransmitFile发文件时TRANSMIT_FILE_B

发布时间: 2013-01-06 15:44:48 作者: rapoo

TransmitFile发文件时TRANSMIT_FILE_BUFFERS参数导致的错误
本帖最后由 kevin_done_analyse 于 2011-10-27 21:39:05 编辑 初学网络,在写一个简易的文件服务器,使用完成端口,TransmitFile发送文件。为了先发送文件长度,使用了LPTRANSMIT_FILE_BUFFERS参数。具体代码类似:

//建立LPTRANSMIT_FILE_BUFFERS结构
TRANSMIT_FILE_BUFFERS transmit_buffer;
transmit_buffer.Head = FileLength_Char;
transmit_buffer.HeadLength = 4;//4字节的文件长

//发送
BOOL nRetVal = TransmitFile(obj->sclient, //客户端的连接Socket
tempFile.m_hFile,
0,
TCPFILESEND_BUFFER_SIZE,
&(obj->ol), //重叠IO
&transmit_buffer, //指定在发送文件数据前,先发送的数据
TF_USE_KERNEL_APC | TF_WRITE_BEHIND );


终端接收代码的时候用的是很简单的recv,先接一个4字节的文件长,再接文件。

错误来了,工作器线程的GetQueuedCompletionStatus接收出错,错误代码998,无效的内存访问位置? 在其他机器上运行终端时,GetQueuedCompletionStatus的错误代码为6,句柄无效……
之前我直接发送文件,LPTRANSMIT_FILE_BUFFERS 字段为空的时候没有出现过这个问题,文件可以正常发送。
难道必须要我先投递一个WSASend先发过去一个文件长才可以么?
各位帮帮忙,我急的狠哪,这点小分不成敬意。


我试过先投递一个WSASend先发过去一个文件长然后用TransmitFile发文件,依然出现错误6 句柄无效错误,介一切都是为毛啊为毛啊为毛啊

[解决办法]
该回复于2011-10-30 16:36:37被版主删除

读书人网 >VC/MFC

热点推荐