唯有前进值得敬仰

---等得越久,相聚时越幸福
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

命名管道(续)

Posted on 2010-01-24 21:06  绿豆芽33  阅读(739)  评论(0编辑  收藏  举报
服务端
void CPipetest1Dlg::OnOK() 
{
	// TODO: Add extra validation here
	HANDLE hSvrHndle=CreateNamedPipe("\\\\.\\pipe\\pipetest\\",
		PIPE_ACCESS_DUPLEX,
		PIPE_TYPE_MESSAGE | 
		PIPE_READMODE_MESSAGE |   // message-read mode 
		PIPE_WAIT,                // blocking mode 
		PIPE_UNLIMITED_INSTANCES,
		BUFSIZE,
		BUFSIZE,
		NMPWAIT_WAIT_FOREVER,
		NULL);
	if( INVALID_HANDLE_VALUE == hSvrHndle)
    {
        AfxMessageBox("Error create/open pipe");
		return;
    }
	while(1)
	{	
		if(ConnectNamedPipe(hSvrHndle,NULL)){
			printf("connecting pipe succeed\n");
			break;
		}
	}
	DWORD bytesread=-1;
	char rBuf[512],shareBuf[512];
	BOOL flag=TRUE;
	while(flag){
		BOOL reval=ReadFile(hSvrHndle,
			rBuf,
			sizeof(rBuf),
			&bytesread,
			NULL);
		if(reval){
			if(bytesread>0){
				memcpy(shareBuf,rBuf,sizeof(shareBuf));
				CString str;
				str.Format("%s",shareBuf);
				UpdateData(TRUE);
				m_data=str;
				UpdateData(FALSE);
				strcpy(rBuf,"Received");
				WriteFile(hSvrHndle,rBuf,sizeof(rBuf),&bytesread,NULL);
			}
		}
		else
			flag=FALSE;
	}
	CloseHandle(hSvrHndle);	
	//CDialog::OnOK();
}

客户端

 

void CPipetest2Dlg::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData(TRUE);
	if (m_clientdata=="")
	{
		AfxMessageBox("content blank!");
		return;
	}
	UpdateData(FALSE);
	HANDLE hClient = CreateFile("\\\\.\\pipe\\pipetest\\",
		GENERIC_WRITE |GENERIC_READ,
		0,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
    if(hClient == INVALID_HANDLE_VALUE)
    {
        AfxMessageBox("Error open/connect pipe");
    }
	DWORD bytesread=-1;
	char rBuf[512],shareBuf[512];
    LPTSTR lpsz =(LPTSTR)(LPCTSTR)m_clientdata;
	strcpy(rBuf, lpsz);
	BOOL reval=WriteFile(hClient,rBuf,sizeof(rBuf),&bytesread,NULL);
	if(!reval){
		AfxMessageBox("Write into pipe error!");
	}
	reval=ReadFile(hClient,
		rBuf,
		sizeof(rBuf),
		&bytesread,
		NULL);
	if(reval){
		if(bytesread>0){
			memcpy(shareBuf,rBuf,sizeof(shareBuf));
			CString str;
			str.Format("%s",shareBuf);
			UpdateData(TRUE);
			m_clientdata=str;
			UpdateData(FALSE);
		}
	}
	CloseHandle(hClient);	
	//CDialog::OnOK();
}