管道的问题,高分相问

wyzegg 2002-11-05 09:54:08
我使用阻塞式的管道操作,当客户端ReadFile的时候就被阻塞一直等到服务器有数据返回,如果服务器没有数据返回就一直阻塞,这样感觉很不好,如何可以设定一个类似SOCKET的超时时间,当等待超过这个时间就返回错误?如果解决一定给分
...全文
31 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
snsins 2002-11-08
  • 打赏
  • 举报
回复
while(1)
{
ret=PeekNamedPipe(hReadPipe1,Buff,1024,&lBytesRead,0,0); if(lBytesRead)
{
ret=ReadFile(hReadPipe1,Buff,lBytesRead,&lBytesRead,0);
if(!ret)
break;
ret=send(clientFD,Buff,lBytesRead,0);
if(ret<=0)
break;
}
else
{
lBytesRead=recv(clientFD,Buff,1024,0);
if(lBytesRead<=0)
break;
ret=WriteFile(hWritePipe2,Buff,lBytesRead,&lBytesRead,0);
send(clientFD,Buff,lBytesRead,0);
if(!ret) break;
}
snsins 2002-11-08
  • 打赏
  • 举报
回复
使用PeekNamePipe先判断管道里是否有输入可读

while(1)
{
ret=PeekNamedPipe(hReadPipe1,Buff,1024,&lBytesRead,0,0);//判断管道里是否有数据可读 if(lBytesRead)
{
ret=ReadFile(hReadPipe1,Buff,lBytesRead,&lBytesRead,0);//¶ÁÈ¡¹ÜµÀÀïµÄÊý¾Ý
if(!ret)
break;
ret=send(clientFD,Buff,lBytesRead,0);//½«cmd.exeµÄÊä³öͨ¹ýsocket·¢Ë͵½¿Í»§¶Ë
if(ret<=0)
break;
}
else
{
lBytesRead=recv(clientFD,Buff,1024,0);//½«socketÊý¾Ý¶Á³ö
if(lBytesRead<=0)
break;
ret=WriteFile(hWritePipe2,Buff,lBytesRead,&lBytesRead,0);//½«½ÓÊÕµ½µÄ¿Í»§¶ËÊäÈëд½ø¹ÜµÀ×÷Ϊcmd.exeÊäÈë
send(clientFD,Buff,lBytesRead,0);
if(!ret) break;
}
wyzegg 2002-11-08
  • 打赏
  • 举报
回复
up]
wyzegg 2002-11-06
  • 打赏
  • 举报
回复
没有人知道吗,up
wyzegg 2002-11-05
  • 打赏
  • 举报
回复
nTimeOut参数设置你的超时时间
这个超时值只是等待管道可用的超时值,并不是读写的超时值
Phourm 2002-11-05
  • 打赏
  • 举报
回复
BOOL CallNamedPipe(
LPCTSTR lpNamedPipeName, // pipe name
LPVOID lpInBuffer, // write buffer
DWORD nInBufferSize, // size of write buffer
LPVOID lpOutBuffer, // read buffer
DWORD nOutBufferSize, // size of read buffer
LPDWORD lpBytesRead, // number of bytes read
DWORD nTimeOut // time-out value
);
nTimeOut参数设置你的超时时间

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧