即是说,传送数据时,连接断开了,而这时管道内还有数据,重连后,cmd还会继续发送管道内的数据,所以想在发送失败时清空管道,而知接退出cmd进程仍存在,请问有那个函数可以清空管道的
。
while (1)
{
WaitForSingleObject(g_hEvent,INFINITE);
WideCharToMultiByte(m,WC_COMPOSITECHECK,buff,-1,cmidbuff,200,NULL,NULL);
strcat(cmidbuff,("\r\n"));
len=strlen(cmidbuff);
ret=WriteFile(hWritePipe2,cmidbuff,len,&lBytesRead,0);
if (!ret)
{
break;
}
Sleep(2000);
DWORD dwRead;
while(1)
{
memset(buf,0,300);
memset(bufff,0,sizeof(bufff));
ret=PeekNamedPipe(hReadPipe1,buf,300,&lBytesRead,0,0);
if (lBytesRead)
{
ret=ReadFile(hReadPipe1,buf,lBytesRead,&dwRead,0);
if (!ret)
{
break;
}
memset((char *)&cmdsend4,0,sizeof(COMMAND));
((DWORD *)cmdsend4.cmdshell)[0]=1;
MultiByteToWideChar(CP_ACP,0,buf,-1,bufff,dwRead);
memcpy(cmdsend4.cmdshell+4,bufff,sizeof(bufff));
cmdsend4.num=NUM;
cmdsend4.order=CMDPIPE;
memset(objname4,0,LENGTH);
memset(threadrecvbuf,0,REVLEN);
base64Encode((char *)&cmdsend4,objname4,sizeof(COMMAND));
rett=SendCgiRequest(objname4,threadrecvbuf);
if (rett!=3)
{
rett=SendCgiRequest(objname4,threadrecvbuf);
if (rett!=3)
{
break;//发送失败,想请空管道内的数据,该怎么办
}
}
Sleep(200);
}
else
{
memset((char *)&cmdsend4,0,sizeof(COMMAND));
((DWORD *)cmdsend4.cmdshell)[0]=0;
cmdsend4.num=NUM;
cmdsend4.order=CMDPIPE;
memset(objname4,0,LENGTH);
memset(threadrecvbuf,0,REVLEN);
base64Encode((char *)&cmdsend4,objname4,sizeof(COMMAND));
rett=SendCgiRequest(objname4,threadrecvbuf);
if (rett!=3)
{
rett=SendCgiRequest(objname4,threadrecvbuf);
if (rett!=3)
{
break;
}
}
break;
}
}
}
。
while (1)
{
WaitForSingleObject(g_hEvent,INFINITE);
WideCharToMultiByte(m,WC_COMPOSITECHECK,buff,-1,cmidbuff,200,NULL,NULL);
strcat(cmidbuff,("\r\n"));
len=strlen(cmidbuff);
ret=WriteFile(hWritePipe2,cmidbuff,len,&lBytesRead,0);
if (!ret)
{
break;
}
Sleep(2000);
DWORD dwRead;
while(1)
{
memset(buf,0,300);
memset(bufff,0,sizeof(bufff));
ret=PeekNamedPipe(hReadPipe1,buf,300,&lBytesRead,0,0);
if (lBytesRead)
{
ret=ReadFile(hReadPipe1,buf,lBytesRead,&dwRead,0);
if (!ret)
{
break;
}
memset((char *)&cmdsend4,0,sizeof(COMMAND));
((DWORD *)cmdsend4.cmdshell)[0]=1;
MultiByteToWideChar(CP_ACP,0,buf,-1,bufff,dwRead);
memcpy(cmdsend4.cmdshell+4,bufff,sizeof(bufff));
cmdsend4.num=NUM;
cmdsend4.order=CMDPIPE;
memset(objname4,0,LENGTH);
memset(threadrecvbuf,0,REVLEN);
base64Encode((char *)&cmdsend4,objname4,sizeof(COMMAND));
rett=SendCgiRequest(objname4,threadrecvbuf);
if (rett!=3)
{
rett=SendCgiRequest(objname4,threadrecvbuf);
if (rett!=3)
{
break;//发送失败,想请空管道内的数据,该怎么办
}
}
Sleep(200);
}
else
{
memset((char *)&cmdsend4,0,sizeof(COMMAND));
((DWORD *)cmdsend4.cmdshell)[0]=0;
cmdsend4.num=NUM;
cmdsend4.order=CMDPIPE;
memset(objname4,0,LENGTH);
memset(threadrecvbuf,0,REVLEN);
base64Encode((char *)&cmdsend4,objname4,sizeof(COMMAND));
rett=SendCgiRequest(objname4,threadrecvbuf);
if (rett!=3)
{
rett=SendCgiRequest(objname4,threadrecvbuf);
if (rett!=3)
{
break;
}
}
break;
}
}
}
解决方案 »
- 弹出MessageBox后的焦点问题。
- ==100求教:设置RichEdit为透明之后,发现无法接收拖拽文件,问怎么解决,内详==
- 寻找vc高手
- 还是老问题,一直未得到解答:列名。。无效。未能准备语句。
- 讨论有份,用过C++ iostream的请进
- 救命呀!!内存溢出的问题,我动态申请了空间代码,程序一运行就报错!为何???代码如下!
- vc界面改颜色(在线等)
- 如何实现调用一个函数,该函数返回一个字符串指针,同时返回一个int整数
- visual studio.net和c++的区别
- 各位斑竹大虾们救命呀!小弟急呀!
- vc在访问数据库的列表区页面弹出一个loading页面如何添加?
- 求RTC Client API 找了几天没找到,伸手了 QQ390291060
关闭管道的话,对呀,我就一直想着清空,然后用exit退出了,可以直接关掉试试啊
CloseHandle(ProcessInformation.hProcess);
CloseHandle(hReadPipe1);
CloseHandle(hWritePipe1);
CloseHandle(hReadPipe2);
CloseHandle(hWritePipe2);
CloseHandle(g_hEvent);
谢谢