[C/C++] Pipe-Server/Controll Client soll Funktionen auf Server ausführen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von HowToDaniel, 18. Mai 2010 .

  1. 18. Mai 2010
    Pipe-Server/Controll Client soll Funktionen auf Server ausführen

    Moin - zuersteinmal mein vorhaben...
    Ich möchte einen Pipe-Server erstellen mit dem es möglich ist ein Struct zu versenden welches wie folgt aussehen könnte...

    PHP:
    struct SendOverPipe {
              
    char befehl [ 20 ];
              
    int param1 ;
              
    int param2 ;
              
    int param3 ;
              
    int param4 ;
    }
    Um noch genauer zu werden ich möchte das der Client über eine Nachricht an den Server eine Funktion mit Parametern ausführt und das evtl. die Funktion gg. einen Rückgabewert an den Client weitergibt.

    Hier mein bisheriger Code (kann text versenden....)

    Ich hoffe mit kann wer helfen

    PHP:
    class  pipe {
        private:
            
    char NamedPipe [ 50 ];
            
    #define BUFSIZE 512
            
    BOOL   fConnected ;
            
    DWORD  dwThreadId ;
            
    HANDLE hPipe hThread ;
            
    char  * lpszPipename ;
            static 
    DWORD WINAPI InstanceThread ( LPVOID lpvParam ){
                
    HANDLE hHeap       GetProcessHeap ();
                
    TCHAR pchRequest  = ( TCHAR *) HeapAlloc ( hHeap 0 BUFSIZE * sizeof ( TCHAR ));
                
    TCHAR pchReply    = ( TCHAR *) HeapAlloc ( hHeap 0 BUFSIZE * sizeof ( TCHAR ));
                
    DWORD cbBytesRead  0 cbReplyBytes  0 cbWritten  0 ;
                
    BOOL fSuccess  FALSE ;
                
    HANDLE hPipe   NULL ;
                
    printf ( "InstanceThread created, receiving and processing messages.\n" );
                
    hPipe  = ( HANDLE lpvParam ;
                while (
    1 ){
                    
    fSuccess  ReadFile ( hPipe , pchRequest BUFSIZE * sizeof ( TCHAR ),& cbBytesRead , NULL );
                    if (!
    fSuccess  ||  cbBytesRead  ==  0 ) break;
                    
    printf ( "Get:> %s\n" , GetAnswerToRequest ( pchRequest pchReply , & cbReplyBytes ));
                    
    fSuccess  WriteFile ( hPipe , pchReply , cbReplyBytes ,& cbWritten , NULL );
                }
                
    FlushFileBuffers ( hPipe );
                
    DisconnectNamedPipe ( hPipe );
                
    CloseHandle ( hPipe );
                
    HeapFree ( hHeap 0 pchRequest );
                
    HeapFree ( hHeap 0 pchReply );
                
    MessageBox ( NULL , "PIPE CLOSE" , "PIPE" , MB_OK );
                
    printf ( "InstanceThread exitting.\n" );
            return 
    1 ;
            }

         public:
            
    pipe (){ sprintf ( lpszPipename , "\\\\.\\pipe\\PIPEX_%lu" , GetCurrentProcessId ());}
            
    HANDLE startPipe (){
                    
    hPipe  CreateNamedPipe ( lpszPipename ,
                            
    PIPE_ACCESS_DUPLEX , PIPE_TYPE_MESSAGE  PIPE_READMODE_MESSAGE  PIPE_WAIT ,
                            
    PIPE_UNLIMITED_INSTANCES ,
                            
    BUFSIZE , BUFSIZE , 0 , NULL );
                    
    // Warten auf Verbindung
                    
    fConnected  ConnectNamedPipe ( hPipe NULL ) ?  TRUE  : ( GetLastError () ==  ERROR_PIPE_CONNECTED );
                    if(
    fConnected )
                    
    hThread  CreateThread ( NULL , 0 , InstanceThread ,( LPVOID hPipe , 0 ,& dwThreadId );
                    else 
    CloseHandle ( hPipe );
                return 
    hPipe ;
            }
            static 
    char GetAnswerToRequest ( LPTSTR pchRequest LPTSTR pchReply LPDWORD pchBytes ){
                
    char retValue [ BUFSIZE ];
                
    sprintf ( retValue , "Client Request String:\"%s\"\n" , pchRequest );
                *
    pchBytes  = ( lstrlen ( pchReply )+ 1 )* sizeof ( TCHAR );
                return 
    retValue ;
            }

    }
    NewPipe ;
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.