天天看點

命名管道程序通信

命名管道程序通信

效果:server讀取client發送的字元串。

server:

// named-pipe-server.cpp
#include 
#include 
using namespace std;
char buf[100];
HANDLE hpipe; 
DWORD rlen=0,wlen=0;
void f_create(){
    hpipe=CreateNamedPipe("\\\\.\\pipe\\me",PIPE_ACCESS_DUPLEX ,
    PIPE_TYPE_MESSAGE|PIPE_WAIT ,PIPE_UNLIMITED_INSTANCES,0,0,0,NULL);

    if(ConnectNamedPipe(hpipe, 0)==FALSE){//等待用戶端連結 
      cerr<<"連結成功\n"<      

client:

//named-pipe-client.cpp
#include 
#include
#include 
using namespace std;
char buf[100];
HANDLE hpipe; 
DWORD rlen=0,wlen=0;
void f_connect(){
    WaitNamedPipe("\\\\.\\pipe\\me",NMPWAIT_WAIT_FOREVER);//等待連接配接
    hpipe=CreateFile("\\\\.\\pipe\\me", 
    GENERIC_READ | GENERIC_WRITE, 0,
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);//打開管道 
    if(hpipe==INVALID_HANDLE_VALUE) cerr<<"open named pipe error\n";
    else cout<<"open named pipe ok\n";
}
void f_write(char *a){
    if(WriteFile(hpipe,a,256,&wlen,0)==FALSE){
        cerr<<"client write error\n";
    }
    else{
        cout<<"client write ok. context is:"<      

control:

//通過程式設計實作先開啟server。再打開 client。 
#include 
#include
using namespace std;
int main(int argc, char *argv[])
{
  system("start named-pipe-server.exe");//start 不能漏 
  Sleep(1000);
  system("start named-pipe-client.exe");
  return 0;
}      

執行效果

命名管道程式通信