WinAPI namedPipes



  • Hallo ich beschäftige mich gerade mit namedPipes und da mein Englisch nicht gerade das Beste ist hab ich einige Fragen dazu.

    Ich habe mal angefangen eine NamedPipe zu erstellen.

    HANDLE hPipe;
      if (GetLastError() != ERROR_PIPE_BUSY)
      {
        cout<<"Could not open pipe"<<endl;
      }
      if (!WaitNamedPipe(lpszPipename, 20000))
      {
        cout<<"Could not open pipe"<<endl;
      }
      TCHAR write[BUFSIZE];
      write[0]=0;
      write[1]=1;
      write[2]=2;
      write[3]=3;
      write[4]=4;
    DWORD cbWritten;
    DWORD dwMode = PIPE_READMODE_MESSAGE;
      fSuccess = SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL);
      if (!fSuccess)
      {
        cout<<"SetNamedPipeHandleState failed"<<endl;
        return -6;
      }
      // Send a message to the pipe server.
      fSuccess = WriteFile(hPipe,block,sizeof(block),&cbWritten,NULL);
      if (!fSuccess)
      {
        cout<<"WriteFile failed"<<endl;
        return -5;
       }
    
      FlushFileBuffers(hPipe);
      DisconnectNamedPipe(hPipe);
      CloseHandle(hPipe);
    

    aber hier scheitere ich schon da er nicht connecten kann. So simpel das Beispiel auch ist. Das Beispiel in der msdn ist einfach ein wenig komplex um es auf Anhieb zu kapieren im Forum bisher auch nichts konkretes gefunden.

    Vielen Dank im vorraus schonmal.



  • aber hier scheitere ich schon da er nicht connecten kann. So simpel das Beispiel auch ist. Das Beispiel in der msdn ist einfach ein wenig komplex um es auf Anhieb zu kapieren im Forum bisher auch nichts konkretes gefunden.

    Dein Fehlerbeschrieb ist sehr mager.
    Du sagst. dass connected nicht geht, aber der relevante Code zeigst Du nicht.
    ➡ Besser beschreiben, Fehlermeldungen etc. zeigen, relevanten Code zeigen.

    Simon



  • sry ich hatte zwar zwei Codes gechickt aber scheint irgendwas schief gegangen sein.

    das ist der Client

    hPipe = CreateFile(lpszPipename,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
    HANDLE hPipe;
      if (GetLastError() != ERROR_PIPE_BUSY)
      {
        cout<<"Could not open pipe"<<endl;
      }
      if (!WaitNamedPipe(lpszPipename, 20000))
      {
        cout<<"Could not open pipe"<<endl;
      }
      TCHAR write[BUFSIZE];
      write[0]=0;
      write[1]=1;
      write[2]=2;
      write[3]=3;
      write[4]=4;
    DWORD cbWritten;
    DWORD dwMode = PIPE_READMODE_MESSAGE;
      fSuccess = SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL);
      if (!fSuccess)
      {
        cout<<"SetNamedPipeHandleState failed"<<endl;
        return -6;
      }
      // Send a message to the pipe server.
      fSuccess = WriteFile(hPipe,block,sizeof(block),&cbWritten,NULL);
      if (!fSuccess)
      {
        cout<<"WriteFile failed"<<endl;
        return -5;
       }
    
      FlushFileBuffers(hPipe);
      DisconnectNamedPipe(hPipe);
      CloseHandle(hPipe);
    

    das ist der server

    HANDLE hPipe;
    
       hPipe = CreateNamedPipe(lpszPipename,PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
                                 PIPE_TYPE_MESSAGE |PIPE_READMODE_MESSAGE | PIPE_WAIT,PIPE_UNLIMITED_INSTANCES,
                                 BUFSIZE*sizeof(TCHAR),BUFSIZE*sizeof(TCHAR),5000,NULL);
    
       if (hPipe == INVALID_HANDLE_VALUE)
       {
         cout<<"CreatePipe failed"<<endl;
       }
    

    so hoffe nun funktioniert es.
    Und zwar geht er bei mir bei dem ersten cout<<"Could not open pipe"<<endl; raus


Anmelden zum Antworten