首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

TransmitFile发文件时TRANSMIT_FILE_BUFFERS参数导致的异常

2013-01-06 
TransmitFile发文件时TRANSMIT_FILE_BUFFERS参数导致的错误本帖最后由 kevin_done_analyse 于 2011-10-27

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被版主删除

热点排行