c++通道应用(服务器篇)
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-29
unt=0; } } //定义创建通道反馈信息的函数 bool CPipeServer::ServerReplyInfo(CString StrReply) { bool IsSuc=false; MyPipe=CreateNamedPipe(MyPipeName, PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE|PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 256, 256, NULL, //NMPWAIT_USE_DEFAULT_WAIT, NULL); if (MyPipe!=INVALID_HANDLE_VALUE) { m_StrReply=StrReply; IsSuc=true; m_pWinThread=AfxBeginThread(ServerReadProc,(LPVOID) this); } return IsSuc; } //定义创建通道反馈信息的函数 //定义服务器退出时的操作 bool CPipeServer::ServerExit() { bool IsSuc=false; HANDLE hFile; TCHAR buffer[256]; DWORD dwNumberOfBytesWritten; WaitNamedPipe(MyPipeName,NMPWAIT_WAIT_FOREVER); hFile=CreateFile (MyPipeName,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRIT E, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_FLAG_WRITE_THROUGH,NULL ); if(hFile==INVALID_HANDLE_VALUE) { return IsSuc; } _stprintf(buffer,_T("exit")); if (WriteFile(hFile,buffer,(_tcslen(buffer)+1)*sizeof (TCHAR),&dwNumberOfBytesWritten,NULL)) { IsSuc=true; } CloseHandle(hFile); return IsSuc; } //定义服务器退出时的操作 //服务器读取并处理信息 UINT CPipeServer::ServerReadProc(LPVOID lParam) { CPipeServer * pPipeServer=(CPipeServer*)lParam; DWORD dwNumberOfBytesRead,dwNumberOfBytesWritten; TCHAR buffer[256]; while(ConnectNamedPipe(pPipeServer->MyPipe,NULL)) { while(ReadFile(pPipeServer- >MyPipe,buffer,256*sizeof(TCHAR),&dwNumberOfBytesRead,NULL)) { if(dwNumberOfBytesRead==0) break; if(_tcscmp(buffer,_T("exit"))==0) { DisconnectNamedPipe(pPipeServer->MyPipe); CloseHandle(pPipeServer- >MyPipe); return 0; } if(pPipeServer->m_pWndServer!=NULL) { ((CListBox*)pPipeServer->m_pWndServer- >GetDlgItem(IDC_LBCONTENT))->InsertString(0,buffer); } _tcscpy(buffer,pPipeServer->m_StrReply); WriteFile(pPipeServer->MyPipe,buffer,(_tcslen (buffer)+1)*sizeof(TCHAR),&dwNumberOfBytesWritten,NULL); } DisconnectNamedPipe(pPipeServer->MyPipe); //管道服务 器断开该实例的连接 } CloseHandle(pPipeServer->MyPipe); //关闭实例句柄 return 0; } //服务器读取并处理信息 //使用一个ID为IDC_BTNCONNECT的Button控件控制服务器开启/关 闭,并使用一个ID为IDC_BTNCONNECT的combo box的控件显示服务器端显示的信 息。 void CaccDlg::OnBnClickedBtnconnect() { CPipeServer * pPipeServer=(CPipeServer*)this; CString MyCaption; GetDlgItem(IDC_BTNCONNECT)->GetWindowText (MyCaption); UINT i; if(MyCaption.Compare(_T("连接"))==0) { for(i=0;i<pPipeServer- >m_InstanceCount;i++){ pPipeServer->m_pPipeServer->SethWndServer (this); pPipeServer->m_pPipeServer- >ServerReplyInfo(_T("服务器应答!")); } |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于c++通道应用(服务器篇)的所有评论