虚拟通道句柄不能忘记填值,否则服务端收到数据后用一个非法的句柄将报错

 UINT __stdcall CQQCDlg::SendFileThread(LPVOID pimsg)
{
HANDLE file_handle;
char szFileName[128];
TYPE_PACKET *pfilemsg;
TYPE_PACKET filemsg;
ULONG byteWriten;

pfilemsg = (TYPE_PACKET *)pimsg;
strcpy(szFileName,pfilemsg->packet_ctcfa.fullname);

// 打开要发送的文件
file_handle = CreateFile(szFileName, GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL, NULL);
//开始发送文件,直到文件发送完毕// 打开文件失败没有出错处理
while( ReadFile(file_handle, filemsg.packet_ctcf.buffer, sizeof(filemsg.packet_ctcf.buffer)
 , &filemsg.packet_ctcf.buffer_length, NULL) != 0 )
{
if ( 0 == filemsg.packet_ctcf.buffer_length )
{
// 文件已经读到末尾了
break;
}
if ( filemsg.packet_ctcf.buffer_length < sizeof(filemsg.packet_ctcf.buffer) )
{
            filemsg.cmd_type = WF_CLIENT_TO_CLIENT_COMPLETE;
}
else
{
            filemsg.cmd_type = WF_CLIENT_TO_CLIENT_NORMAL;
}
filemsg.packet_ctcf.rfileHandle = pfilemsg->packet_ctcfa.rfileHandle;
// 虚拟通道句柄不能忘记填值,否则服务端收到数据后用一个非法的句柄将报错
filemsg.packet_ctcf.rhvirChanl = pfilemsg->packet_ctcfa.rhvirChanl;

if ( 0 == WriteFile(hpipe_write, &filemsg, sizeof(TYPE_PACKET), &byteWriten, NULL) )
{
if ( hpipe_write )
{
DisconnectNamedPipe(hpipe_write);
CloseHandle(hpipe_write);
hpipe_write = NULL;
}
}
}
// 发送完毕,关闭句柄
CloseHandle(file_handle);

return 0;
}

你可能感兴趣的:(File,null)